快速排序算法学习笔记
2016-08-17 19:52
225 查看
今天学习快速排序算法;
思想:分治法(选基准,分区,递归);
原理:在无序数列中随机选取一个元素作为基准进行分区,比这个元素小的放在左边,大的放右边,再对两边的元素继续选基准分区;知道不可分,排序完毕。不断的挖坑,填坑。http://blog.csdn.net/morewindows/article/details/6684558
性能最好:基准每次选在中间;o(nlogn);
性能最差:基准每次选到最大或者最小;O(n*n);
平均性能:o(nlogn);
代码实现:递归实现
算法缺陷:在数据基本有序时,算法退化为冒泡排序;我们可以在每次划分后比较两端的长度,并先对短的序列进行排序(目的是先结束这些栈以释放空间),可以将最大深度降回到O(㏒n)级别。
快速排序在大多数情况下都是适用的,尤其在数据量大的时候性能优越性更加明显,需要考虑下优化以提高其在最坏情况下的性能。
思想:分治法(选基准,分区,递归);
原理:在无序数列中随机选取一个元素作为基准进行分区,比这个元素小的放在左边,大的放右边,再对两边的元素继续选基准分区;知道不可分,排序完毕。不断的挖坑,填坑。http://blog.csdn.net/morewindows/article/details/6684558
性能最好:基准每次选在中间;o(nlogn);
性能最差:基准每次选到最大或者最小;O(n*n);
平均性能:o(nlogn);
代码实现:递归实现
void quick_sort(int *a,int left,int right) { if (left>=right) return; int key=a[left];//挖坑 int low=left; int high=right; while (low<high) { while (a[high] >= key && low < high)//找到右边第一位小于基准 high--; if (low<high) { a[low]=a[high];//填坑,同时又出新坑 low++; } while (a[low] <= key && high>low) low++; if (low<high) { a[high]=a[low]; high--; } } a[low]=key;//填坑 quick_sort(a,left,low-1); quick_sort(a,low+1,right); }
算法缺陷:在数据基本有序时,算法退化为冒泡排序;我们可以在每次划分后比较两端的长度,并先对短的序列进行排序(目的是先结束这些栈以释放空间),可以将最大深度降回到O(㏒n)级别。
快速排序在大多数情况下都是适用的,尤其在数据量大的时候性能优越性更加明显,需要考虑下优化以提高其在最坏情况下的性能。
相关文章推荐
- [算法学习笔记]又一个采用分治法的排序算法----快速排序算法
- 【iOS学习笔记】iOS算法(一)快速排序算法
- 算法导论学习笔记——快速排序算法
- 快速排序算法学习笔记
- Mysql存储过程学习笔记--变量、参数、注释
- WPF学习笔记(三)
- WPF学习笔记一
- extjs学习笔记续
- 设计模式学习笔记:Builder(创建者)
- 第一章 jquery开发入门 学习笔记
- QTP学习笔记之一:无法识别的对象和右键
- 设计模式学习笔记-组合模式(转载)
- CEGUI学习笔记二-- FalagardSkinning使用手册第2章翻译
- Cocos2dx 学习笔记1
- Cocos2d-x学习笔记三之飞机游戏详解之GameOver类的讲解
- Linux学习笔记 - 伺服器架设
- C++学习笔记(一)函数模板与类模板
- Openflow Plugin学习笔记1
- Android 学习笔记二:Android项目的结构
- 【转载】MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用