归并排序算法(递归法)

归并排序算法

首先一个问题,如何将两个整数进行升序排序?

这不简单吗。将两个数比较,再将小的放在前面,大的放在后面。

然后如何将两个升序的数组排序为一个数组呢?

我知道我知道!创建第三个数组,将需要那两个数组按下标顺序进行比较,然后将小的数放入第三个数组中,在将两者下标加一。

如,将A数组与B数组的第一个元素比较,假如A小,就将A第一个元素存入temp第一个位中中,然后A与team下标加一

不错,那比较完多出来的元素呢?

直接接到temp后面就可以了

是这样的,那么如何将一个数组用刚刚的方法进行升序呢?

我们知道,这个方法是两个单独的数进行比较。

于是便可以知道,我们要做的第一步便是将数组转化为一个一个的数,然后再将
两个单独的数
进行比较排序,变成
两个有顺序的数组
再通过上面的方法,将两个有顺序的数组变成一个有顺序的数组
依次直到最终变为一个有顺序的数组,这便是归并排序的递归法

以下是代码:

#include<stdio.h>

#define MAX_SIZE 15
void merging(int *list1,int *list2,int list1_size,int list2_size)//数组排序
{
    int temp[MAX_SIZE];
    int i,j,k,m;

    i=j=k=0;

    while(i < list1_size && j < list2_size)
    {
        if(list1[i] < list2[j])
        {
            temp[k++] = list1[i++];
        }
        else
        {
            temp[k++] = list2[j++];
        }
    }

    while(i<list1_size)
    {
        temp[k++] = list1[i++];
    }

    while(j<list2_size)
    {
        temp[k++] = list2[j++];
    }

    for(m=0; m<(list1_size+list2_size); m++)
    {
        list1[m] = temp[m];
    }

}
void mergesort(int list[],int len)//数组拆分
{
    if(len>1)
    {
        int list1_size,list2_size;
        int *list1 = list;
        list1_size = len/2;
        int *list2 = list+(len/2);
        list2_size = len-list1_size;

        mergesort(list1,list1_size);
        mergesort(list2,list2_size);

        merging(list1,list2,list1_size,list2_size);
    }
}
int main(void)
{
    int i;
    int list[10] = {5,6,0,4,2,6,5,8,4,2};
    mergesort(list,10);

    printf("排序后的结果是");
    for(i=0; i<10; i++)
    {
        printf("%d ",list[i]);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值