连基本的排序算法都忘记了--回顾几种基本的排序算法

排序问题:
In:n个数<a1, a2, ... , an>;
Out:输入序列的一个排列(重新排序,升或降)<a1', a2', ... an'>,使得a1'<=a2'<=...<=an'。

1. 插入排序:这是一个对少量元素进行排序的有效算法。
工作机理:
与人平时打牌时整理手中的牌的做法相似,在开始摸牌时,我们左手是空的,接着一次从桌面上摸起一张牌,并将牌插入到左手一把牌中的正确位置上。为了找到正确位置,要将它与手中已有的每一张牌从右到左进行比较。关键要知道的是,左手中的牌都是已排好序的。
最坏情况运行时间Θ(n^2)
InsertionSorting


2. 冒泡排序:一种简单流行的排序算法,它重复地交换相邻的两个反序元素。
最坏情况运行时间Θ(n^2)
BubbleSorting

3. 合并排序:
渐近运行时间Θ(nlgn)
MergeSorting

4. 快速排序:
最坏情况运行时间Θ(n^2)
平均运行时间Θ(nlgn)

分治过程三步骤:
分解:数组A[p..r]被划分成两个(可能空)子数组A[p..q-1]和A[p+1..r],使得A[p..q-]中的每个元素都小于等于A[q],而且小于等于A[q+1..r]中的元素。q也是在划分过程中计算出来。
解决:通过递归调用快速排序,对子数组A[p..q-1]和A[q+1..r]排序。
合并:因为两个子数组是就地排序的,所以整个数组A[p..r]已排序。
QuickSorting

快速排序随机版:在此算法中,不是始终采用A[r]作为主元,而是从子数组A[p..r]中随机选一个元素。
由于主元元素是随机的,所以在平均情况下,对输入数组的划分能够比较对称。
RandomizedQuickSorting

5. 堆排序:
时间上限O(nlgn)
posted @ 2007-01-28 19:55  MK2  阅读(649)  评论(0编辑  收藏  举报