排序

1.插入排序

1
2
3
4
5
6
7
8
9
10
11
12
13
void InsertSort(int r[],int n)
{
for(i=2;i<=n;i++)
{
r[0]=r[i];
for(j=i-1;r[0]<r[j];j--)
{
r[j+1]=r[j];
}
r[j+1]=r[0];
}
}

希尔排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void ShellSort(int r[],int n)
{
for(d=n/2;d>=1;d=d/2)
{
for(i=d+1;i<=n;i++)
{
r[0]=r[i];
for(j=i-d;j>0&&r[0]<r[j];j=j-d)
{
r[j+d]=r[j];
}
r[j+d]=r[0];
}
}
}

2.交换排序

冒泡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BubbleSort(int r[],int n)
{
exchange=n;
while(exchange!=0)
{
bound=exchange;exchange=0;
for(j=1;j<bound;j++)
{
if(r[j]>r[j+1])
{
r[j]<-->r[j+1];
exchange=j;
}
}
}
}

快速排序

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
32
33
int Partition(int r[],int first,int end)
{
i=first;
j=end;
while(i<j)
{
while(i<j&&r[i]<=r[j])j--;
if(i<j)
{
r[i]<-->r[j];
i++;
}
while(i<j&&r[i]<=r[j])i++;
if(i<j)
{
r[j]<-->r[i];
j--;
}
}
return i;
}
void QuickSort(int r[],int first,int end)
{
if(first<end)
{
pivot=Partition(r,first,end);
QuickSort(r,first,pivot-1);
QuickSort(r,pivot+1,end);
}
}

3.选择排序

简单选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
void SelectSort(int r[],int n)
{
for(i=1;i<n;i++)
{
index=i;
for(j=i+1;j<=n;j++)
{
if(r[j]<r[index])index=j;
}
if(index!=i)
r[i]<-->r[index];
}
}

堆排序

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
void Sift(int r[],int k,int m)
{
i=k;
j=2*i;
while(j<=m)
{
if(j<m&&r[j]<r[j+1])j++;
if(r[i]>r[j])break;
else{
r[i]<-->r[j];
i=j;j=2*i;
}
}
}
void HeapSort(int r[],int n)
{
for(i=n/2;i>=1;i--)
{
Sift(r,i,n);
}
for(i=1;i<n;i++)
{
r[1]<-->r[n-i+1];
Sift(r,1,n-i);
}
}