3.归并排序

  • 主要思想:分治。

  • 步骤:

    1.确定分界点:mid=(left+right)/2;

    2.分别递归排序right and left;

    3.归并左右两边。

    归并方法:1)两指针分别指向两数组的第一个数,数列最小值是两者其中之一;

    2)取两指针所指数的最小值,作为有序数组的下一个数;

    3)被取值的指针后移一位,再与另一指针所指数比较;

    4)重复上述过程,直到有一数组值被取完;

    5)将数组剩余的数直接连接到有序数列后。

eg.从小到大
void merge_sort(int q[], int l, int r)
{if (l >= r)return; //未排列数列只剩一个或没有数时退出//确定分界点int mid = (l + r) / 2;//两边分别递归merge_sort(q, l, mid);merge_sort(q, mid + 1, r);//合二为一int k = 0, i = l, j = mid + 1;//i取第一个数组,j取第二个while (i <= mid && j <= r){if (q[i] <= q[j]){t[k++] = q[i++];}else{t[k++] = q[j++];}}//如果有一数组已经被去完,则直接连接剩余的数while (i <= mid){t[k++] = q[i++];}while (j <= r){t[k++] = q[j++];}//把替换数组t存入原数组for (i = l,j=0; i <= r; j++,i++){q[i] = t[j];}
}
eg.从小到大
void merge_sort(int q[], int l, int r)
{if (l >= r)return; int mid = (l + r) / 2;merge_sort(q, l, mid);merge_sort(q, mid + 1, r);int k = 0, i = l, j = mid + 1;while (i <= mid && j <= r){if (q[i] >= q[j])//只需更改此处运算符号{t[k++] = q[i++];}else{t[k++] = q[j++];}}while (i <= mid){t[k++] = q[i++];}while (j <= r){t[k++] = q[j++];}for (i = l,j=0; i <= r; j++,i++){q[i] = t[j];}
}

基础算法3——归并排序 c语言相关推荐

  1. 排序算法之归并排序 ( C语言版 )

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

  2. 排序算法之——归并排序 C语言实现

    一 .归并排序的思路: 归并排序采用的是分治的思想,就是将数组进行分隔,直到最小的单位(两个元素),然后对最小的单位进行排序.最后将排好序的单位依次遍历到数组中. 1 将数组进行分隔,直到不能再分的最 ...

  3. 算法基础课-基础算法

    第一讲 基础算法 快速排序 归并排序 二分 整数二分模板 AcWing 789. 数的范围(整数二分法) AcWing 1236.递增三元组 AcWing 730. 机器人跳跃问题 AcWing 12 ...

  4. c++ 快速排序_C语言必学的12个排序算法:归并排序(第8篇)

    题外话很多童鞋感受算法比较难度,的确,算法其实和C语言本身关系不大,算法是计算机科学家利用丰富的数学和算法设计知识研究出来,如今我们只需拿来主义,学习使用即可,当然这需要一定的努力过程. [C语言必学 ...

  5. 【排序算法】归并排序(C语言)

    [排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...

  6. C语言基础算法:魔方阵

    C语言基础算法:魔方阵. 核心玩法:第一个元素放置第一排(第0行)中间位置,依次往右上方填充数据, 若是 1.右上角行,列越界,该元素放置上一元素下方a(i+2)(j-1)位置 2.右上角行越界,而列 ...

  7. 一篇解双链表(0基础看)(C语言)《数据结构与算法》

    目录 序言 带头双向循环链表 1. 概念 2. 效果展示图 3. 接口实现 3.01. 本文章要实现的接口 ​3.02. 双链表的实现 3.03. 双链表的初始化 3.04. 打印链表 3.05. 动 ...

  8. 经典c语言基础代码大全,10个经典的C语言面试基础算法及代码

    <10个经典的C语言面试基础算法及代码>由会员分享,可在线阅读,更多相关<10个经典的C语言面试基础算法及代码(24页珍藏版)>请在人人文库网上搜索. 1.10个经典的C语言面 ...

  9. 【基础算法】算法,从排序学起(一)

    本文目录 1.导言 2.谈谈排序 2.1 何为排序?(What is sorting?) 2.2 排序的应用(Why sorting?) 2.3 常见排序算法的种类(How to sort?) 3.基 ...

最新文章

  1. 预测----三个原则
  2. 使用html测试数据库连接与操作(含界面) 第一步界面设计
  3. 直播预告 | 共识、区块链和全球一体化经济
  4. 推荐系统遇到曝光偏差怎么办?用对比学习!
  5. java的set接口_Java集合-Set接口
  6. 关于高德地图Android开发时地图只显示一次、第二次打开不定位的解决办法
  7. LeetCode 167. 两数之和 II - 输入有序数组(双指针)
  8. Python面试真题第二节
  9. 易邮服务器com组件注册失败,com组件注册失败有什么办法可以解决
  10. 你大学生活最美好的时刻是?
  11. 网易云音乐PC客户端加密API逆向解析
  12. android开发中对图片的处理方式汇总
  13. 神奇的「种子法则」:意念具有不可思议的超能量
  14. 已然神话的区块链的应用了解一下-MGCEX
  15. 研究表明:手机移动数据可用于预测犯罪行为
  16. 一帘心事碎碎念,一眸雪舞剪剪风
  17. 【优化系列】汇编优化技术(九):WebAssembly(wasm)平台SIMD优化
  18. 图像分割(四)—— Is Space-Time Attention All You Need for Video Understanding?
  19. OracleTechnologyNetwork
  20. 安装Microsoft.UI.Xaml.2.6(WSA安卓子系统安装缺失)

热门文章

  1. [ 手记 ] 联想rd650服务器整列及系统安装
  2. mapbox 添加argis rest 动态地图服务
  3. spring cloud sream 统一集成mq中间件
  4. tldr_tldr将手册页转换为简明英语解释
  5. Surf: Speed up robust feature的回顾和思考
  6. 获取文件夹所有文件名,并生成相对应名称的文件夹
  7. 怎样让计算机共享,普通打印机如何设置共享并且共享到其他电脑?
  8. Java初中级框架面试题
  9. 区块链Fabric 之共识机制
  10. 字节跳动笔试题-特征提取