对快速排序的一些理解
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作为中间,两边完成了第一次排序
代码如下
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 语言程序(二)
- 快速排序
- 如何写好 C main 函数
- Lua和C语言的交互详解
- C#快速排序算法实例分析
- C#递归算法之快速排序
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言判断一个数是否是2的幂次方或4的幂次方