c_cpp 合并排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 合并排序相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
void merge(int* a, int s, int m, int e){
    int n1 = m-s+1, n2 = e-m;
    int L[n1],R[n2],i;
    for(i=0; i<n1; i++)
        L[i] = a[s+i];
    for(i=0; i<n2; i++)
        R[i] = a[m+1+i];
    i=0;
    int j=0,k=s;
    while(i<n1 && j<n2){
        if(L[i] <= R[j]){
            a[k] = L[i];
            i++;
        }
        else{
            a[k] = R[j];
            j++;
        }
        k++;
    }
    while(i < n1){
        a[k] = L[i];
        i++;
        k++;
    }
    while(j < n2){
        a[k] = R[j];
        j++;
        k++;
    }
}

void mergesort(int* a, int s, int e){
    if(s >= e) return;
    int m = s + (e-s)/2;
    mergesort(a,s,m);
    mergesort(a,m+1,e);
    merge(a,s,m,e);
}

int main(){
    int n;
    printf("Enter size of array\n");
    scanf("%d",&n);
    int a[n],i;
    printf("Enter elements of array\n");
    for(i=0; i<n; i++)
        scanf("%d",a+i);
    mergesort(a,0,n-1);
    printf("Sorted array:\n");
    for(i=0; i<n; i++)
        printf("%d ",a[i]);
    return 0;
}

以上是关于c_cpp 合并排序的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 合并排序

c_cpp 合并排序

c_cpp 合并排序

c_cpp 合并排序

c_cpp 合并数组排序

c_cpp 21.合并两个排序列表