排序--快速排序
来源:互联网 发布:三级数据库题型 编辑:程序博客网 时间:2024/06/05 22:35
1、引
- 冒泡排序有他有缺点,它是相临的两个元素之间的交换,效率比较低,对于数据比较多的排序显然是不行的。快速排序是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。
2、基本思想
- 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
考虑如下数组:
9,3,6,5,7,4
第一步:
- 先一个pivot,这个pivot可以随便选,可以定一个算法 pivot = array[n/2],取中间的数
pivot = 5;
第二步:
- 从左长比pivot大的数,从右找比pivot 小的数
从左找到9,从右找到 4
第三步:
- 将第二步找到的两个数交换
4,3,6,5,7,9
第四步:
- 再找下一个满足 第二步条件的数据,一直到左右的下标相等,本轮交换结束。
一轮交换后:
4,3,5,6,7,9
第五步:
- 第四步完成后,左下标以左的数据都比pivot小,以右的数据都比pivot大,这样就把一个无序的数组分成了两部分。
– 4,3,5,这一边的数据都比5小(等于);
– 6,7,9 ,这一边的数据都比5大;
第六步:
- 对分割的两部分又重新从第一步开始,递归调用。
3、C语言实现
void quick_sort( int *array, int n){ int left, right, pivot, tmp; if (n < 2) return; //递归退出的条件 pivot = array[n / 2]; //取中间的数为基准 for ( left = 0, right = n -1;; left++, right--) { //从左边开始找大于pivot的数 while (array[left] < pivot) left++; //从右边开始找小于pivot的数 while (pivot < array[right]) right--; if ( left >= right) //本轮交换结束了 break; //交换 tmp = array[left]; array[left] = array[right]; array[right] = tmp; } quick_sort(array, left); //对左边的排序 quick_sort(array + left, n - left);//对右边的排序}
4、总结
- 分治
- 递归
- 交换
5、参考
https://www.youtube.com/watch?v=SLauY6PpjW4
http://developer.51cto.com/art/201403/430986.htmyc
阅读全文
0 0
- 排序之快速排序
- 排序算法--快速排序
- 插入排序,快速排序
- 快速排序 冒泡排序
- 排序算法--快速排序
- 排序之 快速排序
- 排序之快速排序
- 快速排序、冒泡排序
- 排序---快速排序
- 排序4快速排序
- 【排序】快速排序
- 排序算法---快速排序
- 快速排序,选择排序
- 排序算法-快速排序
- 【排序】快速排序
- 【基础排序】快速排序
- 排序之------快速排序
- 排序–快速排序
- user,eng,userdebug版本的差异
- Linux 线程同步的三种方法
- Mysql几种索引方式的区别及适用情况
- 获得随机数
- JavaScript的document和window对象详解
- 排序--快速排序
- SoapUI做过webService测试
- 超出部分以省略号展示
- sanlyShi的前端之路六:常用input的几种类型
- 开发者不追人工智能就会被淘汰吗?
- 常见HTTP状态(304,200等)
- 如何有效提高asp页面的访问速度
- linux move 实现
- poj-1797-Heavy Transportation [最短路][Dijkstra]