取数组中任意一个数,用两个指针i,j(i在j左侧)分别从左右边界向中间逼近,
当i>=x时,i停止移动,j开始逼近
当i>=x并且j<=x时,交换两个指针所指的数的数值,开启下一轮迭代
直到i与j分别越过中间数(i在j右侧)
开启下一轮快速排序(递归quick_sort分割数组寻找不同的x)
最后使得数组排序完毕
·注意数组下标是否越界
void quick_sort(int u[], int l, int r) {
if (l >= r) return;
int x = u[l], i = l - 1 , j = r + 1;//u[l]对应下面j,防止越界
while (i<j)
{
do i++; while (u[i] < x);
do j--; while (u[j] > x);
if (i < j) swap(&u[i],&u[j]);
}
quick_sort(u, l, j);//j对应u[l],
quick_sort(u, j + 1, r);//j+1对应u[l],
}
//快速排序,l为开头序号,r为结尾序号
//u[r]对应i-1和i,或是u[(l+r-1)/2]对应j和j+1,u[(l+r+1)/2]对应i-1和i
//swap交换两数
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}