归并排序

#include<stdio.h>

void merge(int arr[],int L,int M,int R)
{
     int left_size=M-L;
     int right_size=R-M+1;

     int left_arr[left_size];
     int right_arr[right_size];

     int i,j,k;

     //fill the left array
     for(int i=L;i<M;i++)
     {
          left_arr[i-L]=arr[i];
     }

     //fill the right array
     for(int i=M;i<=R;i++)
     {
          right_arr[i-M]=arr[i];
     }

    //merge into the original arr
    i=0,j=0,k=L;
    while(i<left_size && j<right_size)
    {
         if(left_arr[i]<right_arr[j])
         {
              arr[k]=left_arr[i];
              i++;
              k++;
         }
         else
         {
              arr[k]=right_arr[j];
              j++;
              k++;
         }

    }
    while(i<left_size)
     {
              arr[k]=left_arr[i];
              i++;
              k++;
     }
    while(j<right_size)
    {
              arr[k]=right_arr[j];
              j++;
              k++;
    }

}
void MergeSort(int arr[],int L,int R)
{
     if(L==R)
     {
          return;
     }
     else
     {
         int M=(L+R)/2;
         MergeSort(arr,L,M);
         MergeSort(arr,M+1,R);
         merge(arr,L,M+1,R);
     }

}
int main()
{
    int arr[]={7,3,10,-3,7,9,45,12,18,-5,0,-13,3,14,20,4,0,5,7,3};
    int L=0;
    int R=19;

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

    return 0;
}

代码讲解参考视频 https://www.bilibili.com/video/av9982752/?spm_id_from=333.788.videocard.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值