您的位置:首页 > 编程语言 > C语言/C++

对快速排序的一些理解

2016-07-06 11:13 627 查看
   下面有一个数组

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);
}
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 快速排序