单向指针扫描
void Swap(int i, int j, int array[])
{
int temp;
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
void QuickSort(int begin, int end, int array[])
{
if (begin<end)
{
int mid = Partition(begin, end, array);
QuickSort(begin, mid-1, array);
QuickSort(mid + 1,end, array);
}
}
int Partition(int begin, int end, int array[])
{
int pivot = array[begin];
int sp = begin + 1;
int bigger = end;
while (sp<=bigger)
{
if (array[sp] > pivot)
{
Swap(sp,bigger,array);
bigger--;
}
else
{
sp++;
}
}
Swap(begin, bigger, array);
return bigger;
}
双向指针扫描
int DoubblePartition(int begin,int end,int array[])
{
int pivot = array[begin];
int left = begin + 1;
int right = end;
while (left<=right)
{
if (array[left]<=pivot && left <= right)
{
left++;
}
if (array[right] > pivot&&left <= right)
{
right--;
}
else if(left<right)
{
Swap(left, right,array);
}
}
Swap(begin, right, array);
return right;
}
void DoubbleQuickSort(int begin, int end, int array[])
{
if (begin < end)
{
int mid = DoubblePartition(begin, end, array);
DoubbleQuickSort(begin, mid - 1, array);
DoubbleQuickSort(mid + 1, end, array);
}
主函数(生成随机数组测试数据)
int main() {
srand((unsigned int)time(NULL));
int s[9];
cout << "初始数组为:";
for (int i = 0; i < 9; i++)
{
s[i] = rand() % 100;
cout << s[i] << ",";
}
cout << endl;
DoubbleQuickSort(0, 8, s);
cout << "快速排序后数组为";
for (int i = 0; i < 9; i++)
{
cout << s[i] << ",";
}
system("pause");
return 0;
}
测试结果
有相同元素的三分法(待更新)