数据结构与算法-学习笔记(12)-归并排序

菜鸟一枚,
刚刚学习数据结构与算法,
为了加深理解,
所以与同学们分享学习过程。

今天学习的是,
归并排序!!!

在这里插入图片描述
在这里插入图片描述
上代码:

#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[LEFT_SIZE];
    int right[RIGHT_SIZE];
    int i;

    for(i = L;i < M;i++)  //左边已排序好的
    {
        left[i-L] = arr[i];
    }
    for(i = M;i <= R;i++)  //右边已排序好的
    {
        right[i-M] = arr[i];
    }

    i = 0;
    int 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 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[] = {2,5,1,10,3,9,7,4};
    int L = 0;
    //int M = 4;
    int R = 7;
    int i ;

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

    return 0;
}

谢谢同学们的阅读!!!

发布了28 篇原创文章 · 获赞 15 · 访问量 1052

猜你喜欢

转载自blog.csdn.net/qq_43765237/article/details/105606032
今日推荐