归并排序

归并排序

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路

#include<stdio.h>
typedef int Elemtype;
int Merge(Elemtype a[],Elemtype b[],int startindex,int midindex,int endindex){//子序列的排序
    int i=startindex,j=midindex+1,k=startindex;
    while(i<=midindex&&j<=endindex){
        if(a[i]>a[j]){
            b[k++]=a[i++];
        }else{
            b[k++]=a[j++];
        }
    }
    while(i<=midindex){
        b[k++]=a[i++];
    }
    while(j<=endindex){
        b[k++]=a[j++];
    }
    for(i=startindex;i<=endindex;i++){
        a[i]=b[i];
    }
}
int MergeSort(Elemtype a[],Elemtype b[],int startindex,int endindex){//待排序序列分组
    int midindex;
    if(startindex<endindex){
        midindex=(startindex+endindex)/2;
        MergeSort(a,b,startindex,midindex);
        MergeSort(a,b,midindex+1,endindex);
        Merge(a,b,startindex,midindex,endindex);
    }
}
int main(){
    Elemtype a[11];
    Elemtype b[11];
    int len =10;
    for(int i=0;i<len;i++){
        scanf("%d",&a[i]);
    }
    MergeSort(a,b,0,len-1);
    for(int i=0;i<len;i++){
        printf("%d=%d\\n",i,a[i]);
    }
    return 0;
}

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!