快速排序是一种非常高效的排序算法,可以说比归并排序还有优秀点,快速排序的优点是在原地进行的,时间复杂度为O(nlog n)
快速排序的是将要排序的部分成两部分比如我们找一个元素 作为轴值 ,这里假设是s 然后和下表从t开始的元素比较大小
如果开始a[i]<=a[j]则 j-- 如何 啊a[i]> a[j] 就交换他们的位置 继续比较大小移动的是i 当然这一切满足的条件都是在i<j下执行的 如果i>=j 直接结束 返回i得值
这样得到的是 9 9 (10) 17 18 12 14 返回10的下表 利用递归不断的执行这个过程轴值前面的数都小于轴值后面得数都大于轴值
当递归执行完后这个数组就是由有序的了。
核心的代码为
int swap(int a[],int s,int t){//每一轮得排序
int i=s,j=t;
while(i<j){
while(i<j&&a[i]<=a[j]) j–;
if(i<j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
}
while(i<j&&a[i]<=a[j]) i++;
if(i<j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
j–;
}
}
return i;
}
int fun(int a[],int s,int t){
if(s<t){
int m=swap(a,s,t);
fun(a,s,m-1); 将轴值前面的数组继续执行排序
fun(a,m+1,t); 将轴值后面的数组执行排序
}
}
希望可以给读者带来帮助