今天算是正式开始读算法导论了
不论能看懂多少,且看下去罢
因为正好在学C++,这个合并排序的算法原本打算用C++来实现
但C++实在了解的太少,故而还是用C写了
其实就是将伪代码翻译过来
所以代码比较粗糙
#include "stdio.h"
void merge(int *num,int p,int q,int r)
{
int n1,n2,i,j,k;
int left[100],right[100];
n1=q-p+1;
n2=r-q;
for (i=0; i!=n1; ++i) {
left[i]=num[p+i];
}
for (j=0; j!=n2; j++) {
right[j]=num[q+j+1];
}
left[i]=10000;
right[j]=10000;
i=j=0;
for (k=p; k<=r; k++) {
if (left[i]<=right[j]) {
num[k]=left[i];
++i;
}
else{
num[k]=right[j];
++j;
}
}
}
void merge_sort(int *num,int p,int r)
{
int q;
if (p<r) {
q=(p+r)/2;
merge_sort(num, p, q);
merge_sort(num, q+1, r);
merge(num,p,q,r);
}
}
int main()
{
int length=0,num[100],i;
while (scanf("%d",&num[length])!=EOF) {
length++;
}
merge_sort(num, 0, length-1);
for (i=0; i!=length; ++i) {
printf("%d ",num[i]);
}
putchar('\n');
return 0;
}