void swap(int &x, int &y)
{
int temp = x;
x = y;
y = temp;
}
// 返回拆分后a[p]的索引
int Partition(vector<int> &a, int p, int r)
{
int i = p + 1;
int j = r - 1;
int x = a[p];
// 将[p+1,r)拆分为两部分,左边小于等于a[p],右边大于x,中间为a[p]
while (i < j)
{
while (a[i] <= x && i < j)
i++;
while (a[j] > x && i < j)
j--;
swap(a[i], a[j]);
}
while (a[i] > x)
i--;
swap(a[i], a[p]);
return i;
}
void QuickSort(vector<int> &a, int l, int r)
{
if (l == r - 1 || l == r)
return;
int mid = (l + r) / 2; // 此处可以改为选择随机索引值
swap(a[l], a[mid]);
int p = Partition(a, l, r);
QuickSort(a, l, p);
QuickSort(a, p + 1, r);
}
版权声明:本文为weixin_51794966原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。