快速排序总结
2015-08-26 15:44
453 查看
算法的实现很关键,但是思路更关键,有了思路实现就很容易。快速排序的思路:一趟快速排序后将待排序列分为以关键字(从待排序列中选取的)为轴的两部分,左半部分小于key,右半部分大于key,然后分别对两部分分别递归进行快速排序,直到low>high。每一趟快速排序的思路:首先从high处往前扫描第一个小于key的元素,将其赋值给a[low++](别忘了low<high),然后从low开始向前扫描第一个大于key的元素,将其赋值给a[high--](同样别忘了low<high这个条件)。
以前老是对快速排序记不太清晰的原因,就是将其的总体思路和每一趟快速排序的思路混在一起记忆,弄得不是忘了这个条件,就是想不清后续。关键处代码:
确实快速排序算法作为第一个比较复杂的排序算法不太容易记忆,或者说直接写出全部的代码不太容易,至少对于我是这样子的,原因就是把总体的思路和每一趟排序的思路给弄混了,应该先是总的思路,然后每一趟排序的具体的策略,这样就比较好记忆了。
PS:虽说算法要理解记忆,但是感觉该背的还是要背的。
以前老是对快速排序记不太清晰的原因,就是将其的总体思路和每一趟快速排序的思路混在一起记忆,弄得不是忘了这个条件,就是想不清后续。关键处代码:
//快速排序,对于复杂排序先记忆大的排序思路,然后才是每一趟的排序思路 QuickSort(int a[],int low, int high){ if(lov < high ){//递归结束的条件 int mid = sort(a,low,high); QuickSort(a,low,mid-1); QuickSort(a,mid+1,high); } } int sort (int a[],int low,int high){ int key = a[low];//轴值 while(low < high){ while(a[high] >= key && low < high){ high--; } a[low++] = a[high]; while(a[low] <= key && low < high){ low++; } a[high--] = a[low]; } a[low] = key;//注意这里:前面的交换一直没处理key元素, //我们知道key元素就是轴值因此在最后的时候出来 return low; }
确实快速排序算法作为第一个比较复杂的排序算法不太容易记忆,或者说直接写出全部的代码不太容易,至少对于我是这样子的,原因就是把总体的思路和每一趟排序的思路给弄混了,应该先是总的思路,然后每一趟排序的具体的策略,这样就比较好记忆了。
PS:虽说算法要理解记忆,但是感觉该背的还是要背的。
相关文章推荐
- [HDU 1151] Air Raid 最小路径覆盖
- ACdream 1408 "Money, Money, Money"(找规律)
- S3C6410内存初始化
- 找出将两个正方形对半分的线
- QT5.5环境与arm-none-linux-gnueabi 交叉编译环境搭建
- Missing Number 第一个缺失的数
- Single Number III 两个不同的数出现一次,其余两次,异或
- ConcurrentHashMap源码(二)--initTable
- spring: 加载远程配置
- easyui 绑定数据
- 类的对象内存解析
- c语音中打印参数调用层级即call stack, call trace
- android屏幕适配
- vs2010调试
- PreparedStatement 预编译原理
- USACO-Section 1.3 Prime Cryptarithm(枚举)
- Oracle Study之---Oracle SQL语句中with的使用
- R语言_功效分析
- 使用setBounds()方法需要注意的地方
- 最快排序之"桶排序"