一 、归并排序的思路:

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

1 将数组进行分隔,直到不能再分的最小单位(两个元素)。
2 将最小单位排序
3 将最小单位遍历到数组中

二、代码

#include <stdio.h>
void merge_part(int arr[], int l, int m, int r)
{// 此处应该用 mallocint tmp[256] = { 0 };int idx = l, i = l, j = m + 1, ii = l;for (; i <= m && j <= r;){if (arr[i] < arr[j])tmp[idx++] = arr[i++];elsetmp[idx++] = arr[j++];}if (i <= m) {for (; i <= m; ++i)tmp[idx++] = arr[i];}if (j <= r) {for (; j <= r; ++j)tmp[idx++] = arr[j];}for (; ii <= r; ++ii)arr[ii] = tmp[ii];
}void merge_sort(int arr[], int l, int r)
{int mid = ((r - l) / 2) + l;if (l >= r) return;merge_sort(arr, l, mid);merge_sort(arr, mid + 1, r);merge_part(arr, l, mid, r);
}int main()
{int arr[] = { 8, 36, 23, 2, 17, 6, 59, 20, 13, 28, 14, 83, 9};//int arr[] = { 8, 36, 23, 2, 17, 6 };int N = sizeof(arr) / sizeof(int), i = 0;for (i = 0; i < N; ++i) {printf("%d ", arr[i]);}printf("\n");merge_sort(arr, 0, N - 1);for (i = 0; i < N; ++i) {printf("%d ", arr[i]);}printf("\n");return 0;
}

三、排序流程


从上到下,从左到右是程序的执行流。

归并排序的复杂度:

时间复杂度:- 平均情况:O(nlogn)- 最好情况:O(nlogn)- 最坏情况:O(nlogn)空间复杂度:- 辅助空间:O(n)稳定性: 稳定

这个是递归形式的写法,还有非递归形式的。

*注: 个人笔记只用,如果不妥,还望不吝赐教。

排序算法之——归并排序 C语言实现相关推荐

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

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

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

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

  3. Java--十大排序算法之归并排序

    前言 本系列排序包括十大经典排序算法. 使用的语言为:Java 结构为: 定义抽象类Sort里面实现了,交换,大小比较等方法.例如交换两个值,直接传入下标就可以了.其他的具体排序的类都继承抽象类Sor ...

  4. 成绩排序的c语言算法,成绩排序系统(练习排序算法和复习C语言)

    成绩排序系统(练习排序算法和复习C语言) 实验一 一.实验目的 1.回顾C语言中的输入.输出及结构体等相关知识点: 2.回顾函数的使用: 3.掌握插入排序.交换排序.选择排序中的常用排序的算法思想: ...

  5. 排序算法:归并排序、快速排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...

  6. 排序算法之--归并排序(好玩的一个算法o。o)快速入门

    排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...

  7. NOI提高级:排序算法之归并排序、快速排序

    图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...

  8. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  9. [Alg]排序算法之归并排序

    [Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg⁡(N)N\lg(N)Nlg(N)的排 ...

最新文章

  1. keepalived and heartbeat
  2. chubby分布式锁服务概述
  3. Linux运维工程师必备技能
  4. 计算机组装与维修案例分析,计算机组装毕业论文
  5. Android通过XML来定义Menu
  6. 解决Linux 忘记root 密码的办法
  7. 企业class类命名规范
  8. element el-autocomplete组件 自定义传参的解决方法
  9. 机器学习1-线性回归、Ridge回归、LASSO回归
  10. OOA、OOD、OOP 区别与思想
  11. 8.声卡驱动03-自己实现alsa驱动-虚拟声卡-缓存
  12. iPad商标之争对开发者的影响
  13. 给计算机专业新生的一些学习建议
  14. 阅读记录-统计你的每一次读书和笔‪记
  15. 使用JDT ASTParser解析Java语句序列
  16. Windows桌面应用程序(2-1-1st) 如何为桌面应用程序设计出色的用户体验
  17. 深度长文:Power Automation 帮助企业实现数字化转型
  18. mysql 字段字符串转int_MySQL数据库面试题(2020最新版)(一)
  19. 微信公众号添加Word文档附件教程_公众号添加Excel、PDF、PPT、Zip等附件教程
  20. flask+gunicorn部署

热门文章

  1. 怎么样用虚拟主机搭建网站呢?
  2. ad19生成gerber文件,AD10生成gerber文件的详细说明
  3. 聚类算法小结(2)——谱聚类算法
  4. “大片”火了毁大片,“IP”火了毁IP,现在整个电影圈都在研究什么才是好剧本
  5. C语言常用函数-chmod()改变文件访问方式函数
  6. 构建一个WooCommerce付款扩展
  7. docker 安装后无权限问题
  8. jquery设置html样式无效果,jquery 改变css不生效问题
  9. 索佳CX系列和CX-50全站仪使用说明书
  10. jquery按下标获取元素_jquery获取元素的方法