归并排序(分治思想)

归并排序:归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。由于归并排序分治出来是一棵二叉树,复杂度T(n)=Θ(nlog(n)),归并排序算法是一种稳定的排序算法。

贴上C语言的代码


void Merg(int *list1, int list1_size, int *list2, int list2_size)
{
    int i = 0, j = 0, k = 0;
    int temp[MAXNUM];
    while (i < list1_size&&j < list2_size)
    {
        if (list1[i] < list2[j])
        {
            temp[k++] = list1[i++];
        }
        if (list1[i] > list2[j])
        {
            temp[k++] = list2[j++];
        }
    }
    
    //如果list1还有剩余就加到temp中,下面list2同理
    while (i < list1_size)
    {
        temp[k++] = list1[i++];
    }
    while (j < list2_size)
    {
        temp[k++] = list2[j++];
    }
    //将排序好的数组整合到list1中
    for (int m = 0; m < (list1_size + list2_size); m++)
    {
        list1[m] = temp[m];
    }
}
//分
void Mergsort(int k[], int n)
{
    if (n > 1)
    {
        int *list1 = k;
        int list1_size = n / 2;
        int *list2 = k + n / 2;
        int list2_size = n - list1_size;
        Mergsort(list1, list1_size);
        Mergsort(list2, list2_size);
        Merg(list1, list1_size, list2, list2_size);
    }
}


总结:

归并排序多用于需要外部排序的场景,除此之外当内部排序需要保证稳定性时也采用归并排序(不要求稳定性的内部排序一般采用快排或者堆排序,前者在待排序序列基本有序时效率低,后者堆的维护是个问题)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值