分治排序(2)

来源:互联网 发布:中国软件著作权登记 编辑:程序博客网 时间:2024/06/01 09:50
/*************************************************************************> File Name: merge.c> Author: NULL> Mail: 574889524@qq.com> Created Time: Fri 10 Oct 2014 09:15:22 PM CST ************************************************************************/#include<stdio.h>#define MAX 1000000void Merge(int *A,int p,int q,int r){    int n1 = q-p+1;    int n2 = r-q;    int L[n1+1],R[n2+1];    int i,j,k;    for(i = 0;i<n1;++i)        L[i] = A[p+i];    for(j = 0;j<n2;++j)        R[j] = A[q+j+1];    L[n1] = MAX;    R[n2] = MAX;    i = j = 0;    for(k = p; k<=r;k++){        if(L[i] <= R[j])            A[k] = L[i],i++;        else            A[k] = R[j],j++;    }}void MergeSort(int *a,int p,int r){    int q;    if(p<r){        q = (p+r)/2;        MergeSort(a,p,q);        MergeSort(a,q+1,r);        Merge(a,p,q,r);    }}int main(){    int a[] = {1,7,4,10,2,3,5,9,11,80};    int i,iLength = sizeof(a)/sizeof(int);        MergeSort(a,0,iLength-1);    for(i = 0;i<iLength;++i)        printf("%d ",a[i]);    printf("\n");    return 0;}

0 0
原创粉丝点击