1. 插入排序
(Θ(n^2))
INSERTION-SORT(A)
for j ← 2 to length[A]
do key ← A[j]
△Insert A[j] into the sorted sequence A[1..j-1]
i ← j-1
while i>0 and a[i]>key
do A[i+1]=A[i]
i ← i-1
A[i+1] ← key
2.冒泡排序(Θ(n^2))
BUBBLESORT(A)
for i ← 1 to length[A]
do for j ← length[A]downto i+1
do if A[j]<A[j-1]
the exchange A[j] ←→ A[j-1]
3.合并排序(Θ(nlgn))
调用方法:MERGE-SORT(A,1,length[A])
MERGE-SORT(A,p,r)
if p<r
then q ← [(p+r)/2]
MERGE-SORT(A,p,q)
MERGE-SORT(A,q+1,r)
MERGE(A,p,q,r)
#合并
MERGE(A,p,q,r)
n1 ← q-p+1
n2 ← r-q
create arrays L[1..n1+1] and R[1..n2+1]
for i ← 1 to n1
do L[i] ← A[p+i-1]
for j ← to n2
do R[q+j]
L[n1+1] ← ∞
R[n2+1] ← ∞
i ← 1
j ← 1
for k ← p to r
do if L[i]<=R[j]
then A[k]←L[i]
i ← i+1
else A[k]← R[j]
j ← j+1
4.堆排序(Θ(nlgn))
HEAPSORT(A)
BUILD-MAX-HEAP(A)
for i ← length [A] downto 2
do exchange A[1] ←→ A[i]
heapsize[A] ← heapsize[A]-1
MAX-HEAPIFY(A,i)
#保持堆的性质
(使以i为根的子树成为最大堆)
MAX-HEAPIFY(A,i)
l ← LEFT[i]
r ← RIGHT[i]
if l<= heap-size[A] and A[l]>A[i]
then largest ← l
else largest ← i
if r <= heap-size[A] and A[r]>A[i]
then largest ← r
if largest != i #if A[i]最大则完成
then exchange A[i]←→A[largest]
MAX-HEAPIFY(A,largest)
#建堆
BUILD-MAX-HEAP(A)
heap-size[A] ← length[A]
for i ← length[A]/2 downto 1
do MAX-HEAPIFY(A,i)
5. 快速排序(Θ(n^2))
调用方法:QUICKSORT(A,1,length[A])
QUICKSORT(A,p,r)
if p<r
then q=PARTITION(A,p,r)
QUICKSORT(A,p,q-1)
QUICKSORT(A,q+1,r)
#PARTITION 对数组A[p..r]进行就地重排:
PARTITION(A,p,r)
x ← A[r]
i ← p-1
for j ← p to r-1
do if A[j]<=x
then i ← i+1
exchange A[i] ←→ A[j]
echange A[i+1] ←→ A[r]
return i+1;
欢迎留言交流