快速排序法介绍
快速排序基本思想:
选择一个基准数,通过一趟排序将要排序的数据分割成独立的两个部分;其中一部分的所有数据都比另一部分的所有数据要小。然后,再按此方法对这两部分数据分别进行快速排序,整个过程可以递归进行,以此达到整个数据变成有序序列。
快速排序流程:
- 从数列中挑出一个基准值;
- 将所有比基准数晓得摆放在基准数前面,所有比基准数大的摆放在基准数的后面(相同的数可以放到任意一边);在这个分区退出后,该基准就处于数列的中间位置;
- 递归地把“基准值前面的子数列”和“基准后面的子数列”进行排序。
快速排序代码:
void quick_sort(int a[],int l,int r)
{
if(l<r){
int i,j,x;
i = l;
j = r;
x = a[i];
while (i<j){
while(i<j && a[j]>x)
j--; //从右向左找第一个小于x的数
if(i<j)
a[i++] = a[j];
while(i<j && a[i]<x)
i++; //从左向右找第一个大于x的数
if(i<j)
a[i--] = a[i];
}
a[i] = x;
quick_sort(a,l,i-1); //递归调用
quick_sort(a,i+l,r); //递归调用
}
}