快速排序算法(转)有时间看看
2014-09-01 19:38
218 查看
快速排序算法
廖雪峰 / 编程 / 2008年12月9日17:09 / 阅读: 8
快速排序是一种基于分治的算法,其基本思想是将一个大数组按照一个基准数分成左右两份,左边的部份都不大于基准数,右边的部分都不小于基准数。然后,对这两份再分别应用快速排序,直到分到只剩2个数为止。
快速排序在通常情况下是最快的排序算法,以下是用Python实现的一个例子:
#!/usr/bin/env python # -*-coding: utf8 -*- ''' Quick sort @author: Michael Liao ''' from random import Random def quick_sort(arr): if len(arr) > 1: qsort(arr, 0, len(arr) - 1) def qsort(arr, start, end): base = arr[start] pl = start pr = end while pl < pr: while pl < pr and arr[pr] >= base: pr -= 1 if pl == pr: break else: arr[pl], arr[pr] = arr[pr], arr[pl] while pl < pr and arr[pl] <= base: pl += 1 if pl == pr: break else: arr[pl], arr[pr] = arr[pr], arr[pl] # now pl == pr if pl - 1 > start: qsort(arr, start, pl - 1) if pr + 1 < end: qsort(arr, pr + 1, end) r = Random() a = [] for i in range(20): a.append(r.randint(0, 100)) print a quick_sort(a) print a
快速排序是一种不稳定排序,而冒泡排序则是稳定排序。
稳定排序是指如果排序前有两个相同的数,比如对[a=10, b=10, c=2]排序,a和b相等,排序前a在b的前面,稳定排序后结果为[c, a, b],a仍然在b的前面,而不稳定排序则不保证相等的两个数位置不会交换,排序结果可能变为[c, b, a]。
相关文章推荐
- 有时间可以看看复习一下oracle-总结(转)
- java 程序猿 抽点时间看看c或者c++吧
- JAVA面试题-1 这个主要是怕手生,时间长了看看
- 有时间看看这个
- 想搞清楚remotePublish可以看看这篇文章(考验英语水平的时间到了)
- 批处理基础教程(一)*有时间细心看看
- Xcode基本操作(有时间就看看,后面那些推荐的博客也相当不错)
- 好像还不错,有时间看看吧!
- erlang 游戏开发者blog(这是个牛人 抽时间看看这些博客)
- R语言数据结构重组(空闲时间一定要好好看看)
- A N EAR -D UPLICATE D ETECTION A LGORITHM T O F ACILITATE D OCUMENT C LUSTERING——有时间看看里面的相关研究
- 看看优秀 CEO 如何规划时间
- 今天花一上午时间写的快速排序算法,自己娱乐了
- 批处理基础教程(二)*有时间细心看看
- js 获取当前时间 况且还是动态获取的,也就相当于时间表的 看看呗
- 有点不懂留个时间看看
- 主捎来的一封信,您有时间看看吗?
- 只要6分钟,告诉你少走6年弯路,花点时间看看吧
- 这篇文章证实了索引对于IN,LIKE的优化程度,顺便学会了怎么看看语耗费的时间
- linux学习文档--有时间看看