算法导论——合并排序

来源:互联网 发布:node.js javaweb 编辑:程序博客网 时间:2024/05/21 10:29

今天算是正式开始读算法导论了

不论能看懂多少,且看下去罢

因为正好在学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;}


原创粉丝点击