快速排序的原理

快速排序是一种非常高效的排序算法,可以说比归并排序还有优秀点,快速排序的优点是在原地进行的,时间复杂度为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); 将轴值后面的数组执行排序
}
}

希望可以给读者带来帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值