归并排序算法

来源:互联网 发布:上海数据交易中心工资 编辑:程序博客网 时间:2024/06/05 19:21
#include<stdio.h>
void MERGEsort(int *a,int start,int mid,int end){
    if(end-start>1){
        MERGEsort(a,start,(start+mid)/2,mid);    // 左边二分
        MERGEsort(a,mid,(end+mid)/2,end); // 右边二分
    }
    int i=start,j=mid,st[1000],c=0; // 数据
    while(i<mid&&j<end){ // 合并两个有序队列
        st[c++]=a[i]<a[j]?a[i++]:a[j++];
    }
    while(i<mid){ // 左边有剩余清空左队列数据 
        st[c++]=a[i++];
    }
    while(j<end){ // 右边有剩余数据清空右队列数据
        st[c++]=a[j++];
    }
    for(i=0;i<c;i++){ // 将数据重新整合到原数组中
        a[i+start]=st[i];
    }
}


int main()
{
    int i,st[]={9,8,7,6,5,4,3,2,1,0};
    MERGEsort(st,0,sizeof(st)/4/2,sizeof(st)/4);
    for(i=0;i<sizeof(st)/4;i++)
        printf("%d ",st[i]);
    return 0;
}
原创粉丝点击