归并排序
void Msort ( RcdType SR[], RcdType TR1[], int s, int t ) {
if (s==t) TR1[s] = SR[s];
else {
m = (s+t)/2;
Msort (SR,TR2,s,m);
Msort (SR,TR2,m+1, t);
Merge (TR2,TR1,s,m,t);
}
}
void Merge (RcdType SR[], RcdType TR[], int i, int m, int n){
for (j=m+1, k=i; i<=m && j<=n; ++k){
if (SR[i].key<=SR[j].key)
TR[k] = SR[i++];
else TR[k] = SR[j++];
}
while (i<=m) TR[k++] = SR[i++];
while (j<=n) TR[k++] = SR[j++];
}
基数排序
- 先把最低位一样的一起排列,输出后则是最低位由小到大。
- 再将倒数第二位一样的一起排列,输出后则是倒数第二位从小到大,即后两位从小到大排列。
- 从低位向高位顺序重复上述过程,最终得到从小到大的有序序列。