在最坏情况下任何比较排序算法都需要做Ω(nlgn)次比较
计数排序:假设输入的数据都属于一个小区间内的整数
Counting-sort(A,B,k)
1. let c[0..k] be a new array
2. for i=0 to k
3. c[i]=0
4. for j=1 to A.length
5. c[A(j)]=c[A(j)]+1 //c[i]为数组A中等于i的元素的个数
6.for i=1 to k
7. c[i]=c[i-1]+c[i] //c[i]为数组A中小于等于i的元素的个数
8.for j=A.length downto 1
9. B[c[A(j)]=A(j)
10. c[A(j)]=c[A(j)]-1
总的时间代价为 0(n+k)
桶排序 :*假设输入数据服从均匀分布*,输入的数组包含n个元素,且每个元素都属于(0,1)区间上,同时需要一个临时数组存
BUCKET-SORT(A)
1. n=A.length
2. let B[0...n-1] be a new array
3. for i=0 to n-1
4. make B[i] be an empty list
5. for i=1 to n
6. insert A[i] intp list B[小于等于nA[i]的最大整数]
7. for i=0 to n-1
8. sort list B[i] with insertion sort
9. concatenate the lists B[0],B[1],...B[n-1] together in order
桶排序的期望运行时间为0(n)
这里写代码片
““`