时间复杂度O(n)

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->#include <stdio.h>
#include <stdlib.h>

void merge_sort_inner(int A[], int p, int r)
{
    int q, i, j, k, n1, n2;
    int temp, *L, *R;
    if(p < r)
    {
        q = (p + r) / 2;
        merge_sort_inner(A, p, q);
        merge_sort_inner(A, q+1, r);
        n1 = q - p + 1;
        n2 = r - q;

L = (int*)malloc(sizeof(int) * (n1+1));
        R = (int*)malloc(sizeof(int) * (n2+1));
        for(i = 0; i < n1; i ++)
            L[i] = A[p + i];
        for(i = 0; i < n2; i ++)
            R[i] = A[q + i + 1];
        L[n1] = R[n2] = 2147483647;
        i = 0;
        j = 0;

for(k = p; k <= r; k ++)
            if(L[i] <= R[j])
                A[k] = L[i++];
            else
                A[k] = R[j++];
        free(L);
        free(R);
    }
}

void merge_sort(int A[], int n)
{
    merge_sort_inner(A, 0, n - 1);
}

int main()
{
    int A[] = {3, 7 ,2, 0, 1,3, 2};
    int i;
    merge_sort(A, 7);
    for(i = 0; i < 7; i ++)
        printf("%d ", A[i]);
    printf(" ");
    system("pause");
    return 0;
}

mergsort.c相关推荐

  1. 链表节点合并排序:数组和单链表

    每日一贴,今天的内容关键字为链表节点 1 数组合并排序 1.1 合并两个已排序好的数组 需要额定的存储空间用来存储合并结果 //merge two array which are already so ...

  2. 排序算法二:归并排序(Merge sort)

    归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...

  3. 面试基础算法、及编程 第一弹

    // # -*- coding:utf-8 -*- // # @Author: Mr.chen(ai-chen2050@qq.com) // # @Date: 2018-07-31 17:54:26 ...

  4. 常用的数据结构和算法

    一.数据结构 1.队列 一种先进先出的数据结构 2.栈 一种后进先出的数据结构 3.树 树的遍历算法: 先序遍历 中序遍历 后续遍历 层序遍历 4.图 图的遍历算法: 深度优先遍历算法 广度优先遍历算 ...

  5. 数据结构之八大排序总结

    1.排序的概念:排序就是将一组数据按照一定的顺序,递增或递减排列起来. 2.排序的稳定性:对于两个关键字相等的记录,它们在序列中的相对位置,在排序之前和经过排序之后,没有改变. 3.内部排序与外部排序 ...

  6. Beaver‘s Calculator(分层排序)

    //Beaver's Calculator(分层排序) #include<bits/stdc++.h> #include<stdio.h> using namespace st ...

  7. 2023年贵州信息技术教师培训(day19 分治)

    分治 分治算法 归并排序 例 三友行OJ( www.oj7.c)求逆序对. 一元三次方程求解 循环比赛日程表(match) 分治算法 什么是分治算法(Divide and Conquer)是一种解决复 ...

最新文章

  1. CBS多机器人路径规划
  2. 11.Verilog中如何避免Latch
  3. SQL实战篇:SQL优化问题
  4. django项目连接远程数据库
  5. php是fast_cgi模式,cpanel中的php运行方式使用fast-cgi模式的配置方法
  6. 三个故事看懂了再结婚(转)
  7. linux以命令行下配置连接wlan无线网卡
  8. Listary Pro - 搜索、管理都挺好
  9. 《程序人生》风雨十年-从大学到技术专家我做了啥?
  10. PS笔记:调色部分理论基础
  11. 【Unity】角色动画控制
  12. C++中经典的垃圾回收算法
  13. armplayer 风靡全球的Android s3c6410 arm11 手机开发板 超低价
  14. MONGODB 开发架构设计与模型设计
  15. 主题 10:如何将工作中的创新点转化为专利
  16. (JVM) 沙箱安全机制
  17. python第一个发行版本由c语言实现_1 晓白的python逆袭之旅基础篇---第一章
  18. 新人JS从入门到入土(一)
  19. 超级实用---打字时自动禁用触摸板,避免误触的烦恼!
  20. java canwrite_Java File canWrite()用法及代码示例

热门文章

  1. python: 正则表达式2--元字符与re模块
  2. spring cloud构建互联网分布式微服务云平台-服务提供与调用
  3. 【go网络编程】-HTTP编程
  4. Java邮件发送:带附件 or 不带附件 is nothing
  5. 揭开阿里P2P面纱:大数据是泡泡
  6. VMware vCenter Server安装与配置
  7. 生产环境-linux-tomcat宕掉-乌龙事件
  8. 下午,无心编程,读小诗...
  9. 快排-Python实现
  10. 有效解决RaycastTarget勾选过多的烦恼