对快速排序的一些理解

   下面有一个数组

49 38 65 97 76 12 27 88

首先把49也就是a[low]设置成标杆值,完成第一次排序后49左边的都比49小,49右边的都比49大

1.然后开始排序,从high往low走,也就是j=high,j--找到比49小的,就是27,然后两个调个个,数组变成了

27  38 65 97 76 12 49 88

2.然后从low往high走,i=low,i++,找比49大的然后调个个

27 38 49 97 76 12 65 88

然后再重复1

27 38 12 97 76 49 65 88

然后重复2

27 38 12 49 76 97 65 88这样49作为中间,两边完成了第一次排序


代码如下

int quicksort(vector<int> &v, int left, int right){  //三个参数
if(left < right){
int key = v[left]; //取最左值做key
int low = left;
int high = right;
while(low < high){
while(low < high && v[high] > key){
high--;
}
v[low] = v[high]; //把小于key的值放到当前key的地方
while(low < high && v[low] < key){
low++;
}
v[high] = v[low]; //把大于key的值放到上一部空出来的地方
}
v[low] = key; //把key填到上一步的地方
quicksort(v,left,low-1);
quicksort(v,low+1,right);
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值