合并排序

#include<stdio.h>

void marge(int arr[],int L,int M,int R){
    int Left_size = M-L;
    int Right_size = R-M+1;
    int left[Left_size];
    int right[Right_size];
    int i,j,k; 
    //写入左数组
    for(i = 0;i<M;i++){
        left[i-L] = arr[i];
    }
    //写入右数组
    for(i=M;i<=R;i++){
        right[i-M] = arr[i];
    }
    //合并左右数组
    i = 0;
    j = 0;
    k = L;
    while(i<Left_size&&j<Right_size){
        if(left[i]<right[j]){
            arr[k] = left[i];
            i++;
            k++;
        }
        else{
            arr[k] = right[j];
            j++;
            k++;
        }
    }
    //若左右数组还有剩余
    while(i<Left_size){
        arr[k] = left[i];
        i++;
        k++;
    }
    while(j<Right_size){
        arr[k] = right[j];
        j++;
        k++;
    }
}
void margeSort(int arr[],int L,int R){
    if(L==R){
        return;
    }
    else{
        int M = (L+R)/2;
        margeSort(arr,L,M);
        margeSort(arr,M+1,R);
        marge(arr,L,M+1,R);
    }
}

int main(){
    int arr[]= {6,8,10,9,4,5,2,7};
    int L = 0;
    int R = 7;


    margeSort(arr,L,R);


    for(int i = 0;i<=R;i++){
        printf("%d\n",arr[i]);
    }
    return 0;

全部评论

相关推荐

笑死&nbsp;不是哥们离校了我真要睡街了&nbsp;加上还有几w的贷款&nbsp;不接受我准备去当三和大神
梦想是成为七海千秋:没事,hr这下就有底气了,下次遇到一个不接受的就说,你看,人家这学历都接受了,你凭什么不接受
点赞 评论 收藏
分享
05-01 22:41
中南大学 Java
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司8个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务