排序算法


快速排序

QSORT()

1
2
3
初始化数组z存放准备排序的序列
n=z.len
INI(0,n-1)

INI(int left,int right)

1
2
3
4
5
6
if(left<right)
{
parti=par(left,right);
INI(left,parti-1);
INI(parti+1,right);
}

PAR(int left,int right)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
i=left
j=right+1
while 1
do
{
j=j-1
}while z[j]>z[left]
do
{
i=i+1
}while z[i]<z[left] and i<right
if j>i
SWAP(z[i],z[j])
else
SWAP(z[j],z[left])
break
return j

归并排序

MSORT()

1
2
3
初始化数组z存放准备排序的序列
n=z.len
INI(0,n-1)

INI(int left,int right)

1
2
3
4
5
6
7
if(left<right)
{
mid=(left+right)/2
INI(left,mid)
INI(mid+1,right)
MER(left,mid,right)
}

MER(int left,int mid,int right)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
i=left
j=mid+1
k=right
while i!=mid+1 and j!=right+1
{
if z[i]>z[j]
{
prez[k]=z[j]
k=k+1
j=j+1
}else
{
prez[k]=z[i]
k=k+1
i=i+1
}
}
while i!=mid+1
{
prez[k]=z[i]
k=k+1
i=i+1
}
while j!=right+1
{
prez[k]=z[j]
k=k+1
j=j+1
}
for i=left to right
z[i]=prez[i]