基本思想:给定一个数组a,以a[low]为基准,赋值给X保存,X = a[low](相当于把a[low]的位置腾空了,挖出一个坑),从数组的两边开始查找比较
1.(先从high开始,找到第一个小于基准的元素,然后和a[low]交换位置,即填入a[low]腾出的坑中);
2.再从数组的low位置开始比较,找到第一个大于a[low]的数,填入最新的腾出的坑中(也就是上一步中,满足条件的a[high]的位置)
完成第1步和第2步后,就基准元素就找到了它最终所在的位置;对基准元素左右两边的区间分别再执行上面的两个步骤,最后所得的数组,就是有序的数组。
//快速排序
void quick_sort(int s[], int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int i = l, j = r, x = s[l];
while (i < j)
{
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
s[i++] = s[j];
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
s[j--] = s[i];
}
s[i] = x;
quick_sort(s, l, i - 1); // 递归调用
quick_sort(s, i + 1, r);
}
}
来源:CSDN
作者:Wang_anna
链接:https://blog.csdn.net/Wang_anna/article/details/103692772