1.归并排序[基于分治思想]

  • 算法主要步骤

    • a.确定区间的分界点即区间[l, r]的中间位置:mid = l + r >> 1,分成左、右两边;
    • b.递归排序左边、右边;
    • c.将左、右两边有序的数组合二为一[重点];
  • 归并排序时间复杂度:nlogn,解释如下图所示:

2.代码模板

#include <iostream>using namespace std;const int N = 1000010;
int q[N], tmp[N]; // tmp[N]用于存放最后的结果
int n;            // 待排序数组中元素的个数void merge_sort(int q[], int l, int r)
{if (l >= r)return;// 1.确定分界点midint mid = l + r >> 1;// 2.递归排序处理左右两边区间merge_sort(q, l, mid), merge_sort(q, mid + 1, r);int i = l, j = mid + 1, k = 0;// 3.合二为一while (i <= mid && j <= r)if (q[i] <= q[j])tmp[k++] = q[i++];elsetmp[k++] = q[j++];// 如果左右两边区间长度不相等,还需要更长区间剩余的元素存放到tmp数组中while (i <= mid)tmp[k++] = q[i++];while (j <= r)tmp[k++] = q[j++];// 4.将临时排好序的数组tmp重新赋值给数组q,完成数组q的排序for(i = l, j = 0; i <= r; i++, j++) q[i] = tmp[j];
}int main()
{scanf("%d", &n);for (int i = 0; i < n; i++)scanf("%d", &q[i]);merge_sort(q, 0, n - 1);for (int i = 0; i < n; i++)printf("%d ", q[i]);return 0;
}

归并排序原理及代码模板相关推荐

  1. 整数二分查找原理及代码模板

    1.整数二分算法原理 ps:数组具有单调性,则一定可以使用整数二分算法:但是,能够使用整数二分算法的数组,数组未必具有单调性. 整数二分算法的本质:给定一个区间,在区间中定义了某种性质.该性质在区间的 ...

  2. 归并排序原理及代码实现

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

  3. 二路归并排序原理及JAVA实现

    归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...

  4. 快速排序原理及代码模板

    1.快速排序[基于分治思想] 算法主要步骤: a.确定分界点x:q[l].q[(l+r)/2].q[r].随机选择一个数 b.调整区间[重点]: (1).使得左半边区间的数都小于等于x (2).使得右 ...

  5. 数据结构之排序【归并排序和快排的顶级优化和快排的三种原理的实现及分析】 内含动态演示图

    文章目录 引言: 1.归并排序(MergeSort) 2.快速排序的优化(顶级优化) 3.快速排序的三种思路的代码实现及分析 4.归并排序和快排第3原理的测试 引言: 刚刚去回顾了一下递归实现的几个小 ...

  6. 【Java】排序算法 之 【归并排序】 总结

    目录 1.合并两个有序数组函数 2. 归并排序 3. 非递归实现归并排序 1.合并两个有序数组函数 在学习归并排序之前,我们需要掌握合并两个有序数组为一个有序数组的函数是如何实现的 /*** 合并两个 ...

  7. 归并排序比较次数_归并排序「从入门到放弃」

    归并排序 归并排序,是创建在归并操作上的一种有效的排序算法,效率为O(nlogn).1945年由约翰·冯·诺伊曼首次提出.该算法是采用分治法(Divide and Conquer)的一个非常典型的应用 ...

  8. 数据结构----归并排序

    数据结构----归并排序 原理:参考趣学数据结构 代码: #include<stdio.h> #include<stdlib.h> #define N 100 void gui ...

  9. 常见算法详解(原理及代码实现Python版本)

    文章目录 前言 1.冒泡排序 2.选择排序 3.插入排序 4.希尔排序 5.快速排序 6.归并排序 7.二分法查找 总结 前言 最近复习了下常见的算法,在这里手动再写一遍,权当加深自己的印象.代码实现 ...

最新文章

  1. 给算法工程师和研究员的「霸王餐」| 附招聘信息
  2. 20155313 2016-2017-2 《Java程序设计》第三周学习总结
  3. SAP Spartacus central configuration - B2cStorefrontModule
  4. 【原】webpack--文件监听的原理
  5. 他用科技复活传统艺术:发现甲骨文的终极浪漫
  6. 前端-面试题(答案仅限于自己的理解,非正确答案)
  7. How to create and apply a patch with Git
  8. 第二篇 模拟电子技术基础
  9. opencv Scharr、Canny、LOG边缘提取效果对比
  10. 如何使用MongoDB+Springboot实现分布式ID?
  11. jQuery和$、jQuery(function(){})和(function(){})(jQuery)
  12. macos 10.15.2 iso镜像网盘下载
  13. 怎么批量调色_100款一键批量商业影楼修图调色PS动作,让你成为P图高手!!
  14. python 身份证验证系统_用Python写一个身份证号码校验系统
  15. 完整版身份证前6位判断归属地
  16. 计算机如何寻找ppt文件,如何快速找到电脑里的文件ppt课件
  17. 向《天真的女孩投降》观后感
  18. 借助NetFlow Analyzer的IPAM SPM插件,实现IP和交换机端口管理
  19. Windows10 安装Oracle 11g 的配置详解(1)
  20. r语言中怎样查看函数源代码

热门文章

  1. 跨域?拒绝说概念(内含demo)
  2. 调用链系列四:调用链上下文传递
  3. debian安装oracle jdk
  4. LNMP架构php-fpm相关配置
  5. 很安逸的离线API文档查询工具Dash和Zeal
  6. Bootstrap表单验证插件bootstrapValidator使用方法整理
  7. jQuery.width()和jQuery.css('width')的区别
  8. xcode4发布测试-打包(Archive)
  9. rsync单项同步文件
  10. 去一家小公司从0到1搭建后端架构,做个总结!