// 按照基准值对array数组的 [begin, end]区间中的元素进行划分
int keyi = PartSort(array, begin, end);
// 划分成功后以keyi为边界形成了左右两部分 [begin, keyi-1] keyi [div+1, end]
// 左部分都是比 keyi 位置上的值小的部分,右部分都是比 keyi 位置上的值大的部分。
// 递归排左部分[begin, keyi-1]
QuickSort(array, begin, keyi);
// 递归排右部分[keyi+1, end]
QuickSort(array, keyi+1, end);
// 单趟排序
// 1.霍尔法
int PartSort1(int* a, int left, int right)
{
int keyi = left; // 记录下 key 的位置
while (left < right) // 当 left 与 right 相遇时退出循环
{
// 右边找小
while (left < right && a[right] >= a[keyi])
{
--right;
}
// 左边找大
while (left < right && a[left] <= a[keyi])
{
++left;
}
// 此时 right 位置上的值要比 keyi 位置上的值小,left 位置上的值要比 keyi 位置上的值大
// 交换 left 位置与 right 位置上的值。
Swap(&a[left], &a[right]); // 交换后 left 位置上的值比 keyi位置上的值小, right 位置上的值比 keyi 位置上的值大。
}
// left 与 right 相遇
Swap(&a[left], &a[keyi]);
keyi = left; // 生成新的 keyi 位置
return keyi;
}
// 霍尔单趟排序之后, keyi 位置左边的部分都比 keyi位置的值要小,keyi 位置右边的部分都比 keyi位置的值要大。
'''