#include <stdio.h>
#define INFINITY 999999
#define LEN(A) ((sizeof (A)) / (sizeof A[0])) void print_array(int A[], int len)
{
int i;
/*
int len = LEN(A);
sizeof on array function parameter will return size of 'int *' instead of 'int []'
[-Wsizeof-array-argument]
int len = LEN(A);
^
*/
for (i = 0; i < len; i++)
printf("%d, ", A[i]);
putchar('\n');
}
//merge将本次合并的两个array分别打印
void merge(int A[], int p, int q, int r)
{
int k, i, j;
int n1 = q - p + 1;
int n2 = r - q;
int L[n1+1], R[n2+1]; for (i = 0; i < n1; i++)
L[i] = A[p+i];
L[n1] = INFINITY;
print_array(L, n1+1); for (j = 0; j < n2; j++)
R[j] = A[q+1+j];
R[n2] = INFINITY;
print_array(R, n2+1); i = j = 0;
for (k = p; k <= r; k++) {
if (L[i] <= R[j]) {
A[k] = L[i];
i++;
} else {
A[k] = R[j];
j++;
}
}
} void mergeSort(int A[], int p, int r)
{
if (p < r) {
int q = (p+r)/2;
mergeSort(A, p, q);
mergeSort(A, q+1, r);
merge(A, p, q, r);
}
} int main(int argc, char *argv[])
{
int A[] = {5, 6, 7, 8, 9, 10, 11, 12, 12, -3, 1, 2, 3, 4};
merge(A, 0, 8, 13);
print_array(A, LEN(A)); int B[] = {2, 4, 5, 7, 1, 3, 2, 6};
mergeSort(B, 0, LEN(B)-1);
print_array(B, LEN(B)); return 0;
}

分治-1-归并排序(Divide and Conquer-1-merge sort)的更多相关文章

  1. The Divide and Conquer Approach - 归并排序

    The divide and conquer approach - 归并排序 归并排序所应用的理论思想叫做分治法. 分治法的思想是: 将问题分解为若干个规模较小,并且类似于原问题的子问题, 然后递归( ...

  2. Divide and Conquer.(Merge Sort) by sixleaves

    algo-C1-Introductionhtml, body {overflow-x: initial !important;}html { font-size: 14px; }body { marg ...

  3. 算法上机题目mergesort,priority queue,Quicksort,divide and conquer

    1.Implement exercise 2.3-7. 2. Implement priority queue. 3. Implement Quicksort and answer the follo ...

  4. 【高级排序算法】1、归并排序法 - Merge Sort

    归并排序法 - Merge Sort 文章目录 归并排序法 - Merge Sort nlogn 比 n^2 快多少? 归并排序设计思想 时间.空间复杂度 归并排序图解 归并排序描述 归并排序小结 参 ...

  5. 归并排序(Merge Sort)

    归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序 ...

  6. 【LeetCode】分治法 divide and conquer (共17题)

    链接:https://leetcode.com/tag/divide-and-conquer/ [4]Median of Two Sorted Arrays [23]Merge k Sorted Li ...

  7. js 实现排序算法 -- 归并排序(Merge Sort)

    原文: 十大经典排序算法(动图演示) 归并排序 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得 ...

  8. 【算法】归并排序(Merge Sort)(五)

    归并排序(Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...

  9. 归并排序(merge sort)

    M erge sort is based on the divide-and-conquer paradigm. Its worst-case running time has a lower ord ...

  10. 算法与数据结构基础 - 分治法(Divide and Conquer)

    分治法基础 分治法(Divide and Conquer)顾名思义,思想核心是将问题拆分为子问题,对子问题求解.最终合并结果,分治法用伪代码表示如下: function f(input x size ...

随机推荐

  1. 流浪地球2:AI人工智能+数字生命+元宇宙

    推荐:将 NSDT场景编辑器 加入你的3D开发工具链 剧情介绍 太阳危机   太阳即将老化膨胀,吞没太阳系,地球上的人类构思了各种生存计划:其一是"数字生命计划",该计划制造强大的 ...

  2. 一文搞懂│http 和 https 的通信过程及区别

    目录 两者的区别 HTTP的通信过程 HTTPS的通信过程 两者的区别 端口: http 端口号是80,https 端口号是443 传输协议: http 是超文本传输协议,属于明文传输:https 是 ...

  3. cisco恢复IOS文件的方法

    cisco IOS恢复的方法很多,这里使用TFTP方法恢复. 当你delete flash: 后 路由器重启将不能工作,这时要恢复IOS 把你备份好的IOS文件放到TFTP目录里面. > IP_ ...

  4. UVM——通过一个简单的testbench来了解UVM组件的phase执行顺序

    先写好一个top.sv 查看代码 // 导入VCS或者Modelsim自带的UVM库和宏 `include "uvm_macros.svh" import uvm_pkg::*; ...

  5. c++获取类型信息

    获取类型信息 typeid typeid运算符用来获取一个表达式的类型信息. 对于基本类型数据, 类型信息比较简单, 主要指数据的类型; 对于对象(类类型的数据), 类型信息指: 对象所属的类, 所包 ...

  6. pgsql中物化视图的使用

    1.创建物化视图 CREATE MATERIALIZED VIEW "view_xxx" as  select * from 表 2.刷新物化视图 refresh material ...

  7. leecode76. 最小覆盖子串

    76. 最小覆盖子串 给你一个字符串 s .一个字符串 t .返回 s 中涵盖 t 所有字符的最小子串.如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" . 注意: ...

  8. 堆QAQ

    L2-012 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: x is the root:x是根结点: x and y are si ...

  9. python中下拉框选择

    如选择省区城市 provice = driver.find_element_by_id('****') #先给定位的元素付个变量 select(prvice).select_by_bisible_te ...

  10. js中各种导出和导入

        exports和module exports的区别: exports是module exports的地址引用 export和export default的区别: export和export d ...