常见的排序算法

1.基本概念

1.1 稳定排序和不稳定排序
稳定排序是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序。反之,就是不稳定排序。
比如:一组数字排序前是 a1,a2,a3,a4 其中 a2 和 a3 相等,经过某种排序后为 a4,a2,a3,a1 则称这种排序是稳定的,因为 a2 排序前在 a3 的前面,排序后还是在 a3 的前面。如果变成 a4,a3,a2,a1 就是不稳定的。

1.2 内排序和外排序
在排序过程中,所有需要排序的数都在内存,并在内存中调整它们的存储顺序,称为内排序;在排序过程中,只有部分数被调入内存,完成后再从外存调入数据进行排序,称为外排序,适用于数据很大不能一次调入内存。
内排序的常用算法有:冒泡排序、选择排序、插入排序、堆排序、快速排序

1.3 算法的时间复杂度和空间复杂度
1) 时间复杂度
一个问题的规模是n,解这一问题的某一算法所重复执行的次数为T(n),当n不断变化时,T(n)也会不断变化。但有时想知道它变化时呈现什么规律。为此,引入时间复杂度概念。

一般情况下,算法中操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度,简称时间复杂度。
记作: T(n) = O(f(n))

以冒泡排序算法为例:
冒泡排序算法重复执行的次数是:1 + 2 + 3 ... + (n-1) = n * (n-1) * 1/2
n * (n-1) * 1/2 <= n * n * 1/2
T(n) = n * (n-1) * 1/2
f(n) = n * n
当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数
T(n)/f(n) = 1/2
记作: T(n) = O(n*n)
冒泡排序算法的时间复杂度为 O(n*n)。


2) 空间复杂度
与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。
记作: S(n) = O(f(n))


2.常见的排序算法

2.1 冒泡排序

2.2 选择排序

2.3 插入排序

2.4 堆排序

2.5 归并排序

2.6 快速排序

2.7 希尔排序

 

原文地址:http://www.huanghengxu.com/Html/Article/43.htm

posted @ 2009-12-30 15:27  keith_bin  阅读(202)  评论(0)    收藏  举报