郁郁青青 长过千寻

排序算法

    排序

  1. 快速排序
    1. QSORT()
    2. INI(int left,int right)
    3. PAR(int left,int right)
  2. 归并排序
    1. MSORT()
    2. INI(int left,int right)
    3. MER(int left,int mid,int right)

快速排序

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]
页阅读量:  ・  站访问量:  ・  站访客数: