快速排序

今天介绍快速排序,这也是在实际中最常用的一种排序算法,速度快,效率高。就像名字一样,快速排序是最优秀的一种排序算法。

方法其实很简单:

     假设我们对“6,1,2,7,9,3,4,5,10,8”这10个数进行排序

     首先在这个序列里随便找一个基准数,为了方便就让第一个数“6”作为基准数。

     然后分别从序列两端开始寻找,先从右往左找一个小于6的数,再从左往右找一个大于6的数,然后交换它们。

     6  1  2  7  9  3  4  5  10  8  转换为 6 1 2 5 9 3 4 7 10 8

     直到i==j的时候 就成了这样

     6 1 2 5 4 3 9 7 10 8(绿色3就是i==j的地方)

     交换6 和 3 ,然后6左边的全是小于等于6的数,右边的全是大于等于6的数 3 1 2 5 4 6 9 7 10 8

     之后再把“6”右边的数快速排序,左边的也快速排序,递归进行,最后生成答案。

//核心代码
void quicksort(int left,int right)
{
     if(left>right)return ;
     int i=left,j=right,temp=a[left];
     while(i!=j)
     {
         while(a[j]>=temp && i<j)j--;
         while(a[i]<=temp && i<j)i++;
         if(i<j)swap(a[i],a[j]);
     }
     a[left]=a[i];
     a[i]=temp;
     quicksort(left,i-1);
     quicksort(i+1,right);
     return;
}
View Code

 

    

转载于:https://www.cnblogs.com/wzq1-blogs/p/5910625.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值