快速排序算法
void QuickSort(int* vec,int left,int right)
{
if (left < right)
{
int i = left, j = right;
// 拿出第一个元素, 保存到x中,第一个位置成为一个坑
int pivot = vec[left];
while (i < j)
{
// 从右向左找小于x的数
while (i < j && vec[j] >= pivot)
{
//左移, 直到遇到小于等于x的数
j--;
}
if (i < j)
{
//将右侧找到的小于x的元素放入左侧坑中, 右侧出现一个坑
//左侧元素索引后移
vec[i++] = vec[j];
}
// 从左向右找大于等于x的数
while (i < j && vec[i] < pivot)
{
//右移, 直到遇到大于x的数
i++;
}
if (i < j)
{
//将左侧找到的元素放入右侧坑中, 左侧出现一个坑
//右侧元素索引向前移动
vec[j--] = vec[i];
}
}
//此时 i=j,将保存在x中的数填入坑中
vec[i] = pivot;
QuickSort(vec, left, i - 1); // 递归调用
QuickSort(vec, i + 1, right);
}
}