void Swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
2.上述步骤的1-6步:进行一轮排序
int PartSort1(int* a, int left, int right)
{
int keyi = left;
while (left < right)
{
//找小
while (left < right && a[right] >= a[keyi])
{
--right;
}
//找大
while (left < right && a[left] <= a[keyi])
{
++left;
}
Swap(&a[left], &a[right]);
}
Swap(&a[keyi], &a[left]);
return left;
}
3.第七步:将数组分成两份,继续进行排序
void Quicksort(int* a, int begin, int end)
{
int key = PartSort1(a, begin, end);
Quicksort(a, begin, key - 1);
Quicksort(a, key + 1, end);
}
完整代码:
void Swap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int PartSort1(int* a, int left, int right)
{
int keyi = left;
while (left < right)
{
//找小
while (left < right && a[right] >= a[keyi])
{
--right;
}
//找大
while (left < right && a[left] <= a[keyi])
{
++left;
}
Swap(&a[left], &a[right]);
}
Swap(&a[keyi], &a[left]);
return left;
}
void Quicksort(int* a, int begin, int end)
{
int key = PartSort1(a, begin, end);
Quicksort(a, begin, key - 1);
Quicksort(a, key + 1, end);
}