简单理解快速排序

进行快速排序最重要的就是基准数的选择,有时候基准数选择的不恰当,快速排序也是快不起来的。那么什么是基准数呢,可以理解为标杆。我们要做的就是先让基准数左边的数全小于基准数,右边的全大于基准数。需要注意的是当你选择了最右端的数作为基准数,那么就需要从最左端开始移动,反之亦然。
以6,7,5,2,1为例,我们选择最左边的6为基准数,所以从最右端开始:
第一步:i=0,j=4分别从两端开始探测,发现1<6,于是j停止,i端开始,发现7>6,停止。
第二步:当i,j均停止时,交换。
第三步:再次移动i,j,发现i,j均到了2处,i,j相遇,将基准数与此处的数交换
于是变成了2,1,5,6,7
第五步:分别对基准数左右端重复二,三操作

#include<iostream>
using namespace std;
void quick_sort(int a[], int left,int right){
 if(left>right)
  return;
 int tmp=a[left];//用于存放基准数
 int i=left;
 int j=right;
 while(i!=j){
  while(a[j]>=tmp&&i<j)//由于选择最左端的数作为基准数,所以从最右端找起 
   j--;
  while(a[i]<=tmp&&i<j) //i出发 
   i++;
  if(i<j)
  swap(a[i],a[j]); //交换i,j 
 }
 a[left]=a[i];//将基准数与当前位置的数交换 
 a[i]=tmp;
 quick_sort(a,left,i-1); //利用递归再次对左端和右端进行交换 
 quick_sort(a,i+1,right);
 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值