排序算法之——归并排序 C语言实现
一 、归并排序的思路:
归并排序采用的是分治的思想,就是将数组进行分隔,直到最小的单位(两个元素),然后对最小的单位进行排序。最后将排好序的单位依次遍历到数组中。
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语言实现相关推荐
- 排序算法之归并排序 ( C语言版 )
归并排序 :(Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序列:即 ...
- 【排序算法】归并排序(C语言)
[排序算法]-- 归并排序(C语言) 目录 一.归并排序的原理 二.两个有序数组排序和合并 1. 原地排序 2. 创建临时空间 二.递归实现 三.非递归实现 1. 实现思路 2. 数组边界问题 3. ...
- Java--十大排序算法之归并排序
前言 本系列排序包括十大经典排序算法. 使用的语言为:Java 结构为: 定义抽象类Sort里面实现了,交换,大小比较等方法.例如交换两个值,直接传入下标就可以了.其他的具体排序的类都继承抽象类Sor ...
- 成绩排序的c语言算法,成绩排序系统(练习排序算法和复习C语言)
成绩排序系统(练习排序算法和复习C语言) 实验一 一.实验目的 1.回顾C语言中的输入.输出及结构体等相关知识点: 2.回顾函数的使用: 3.掌握插入排序.交换排序.选择排序中的常用排序的算法思想: ...
- 排序算法:归并排序、快速排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...
- 排序算法之--归并排序(好玩的一个算法o。o)快速入门
排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...
- NOI提高级:排序算法之归并排序、快速排序
图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...
- 数据结构与算法:十大排序算法之归并排序
数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...
- [Alg]排序算法之归并排序
[Alg]排序算法之归并排序 作者:屎壳郎 miaosg01@163.com 日期:Aug 2021 版次:初版 简介: 归并排序是一类在任何情况下都能保证Nlg(N)N\lg(N)Nlg(N)的排 ...
最新文章
- keepalived and heartbeat
- chubby分布式锁服务概述
- Linux运维工程师必备技能
- 计算机组装与维修案例分析,计算机组装毕业论文
- Android通过XML来定义Menu
- 解决Linux 忘记root 密码的办法
- 企业class类命名规范
- element el-autocomplete组件 自定义传参的解决方法
- 机器学习1-线性回归、Ridge回归、LASSO回归
- OOA、OOD、OOP 区别与思想
- 8.声卡驱动03-自己实现alsa驱动-虚拟声卡-缓存
- iPad商标之争对开发者的影响
- 给计算机专业新生的一些学习建议
- 阅读记录-统计你的每一次读书和笔记
- 使用JDT ASTParser解析Java语句序列
- Windows桌面应用程序(2-1-1st) 如何为桌面应用程序设计出色的用户体验
- 深度长文:Power Automation 帮助企业实现数字化转型
- mysql 字段字符串转int_MySQL数据库面试题(2020最新版)(一)
- 微信公众号添加Word文档附件教程_公众号添加Excel、PDF、PPT、Zip等附件教程
- flask+gunicorn部署
热门文章
- 怎么样用虚拟主机搭建网站呢?
- ad19生成gerber文件,AD10生成gerber文件的详细说明
- 聚类算法小结(2)——谱聚类算法
- “大片”火了毁大片,“IP”火了毁IP,现在整个电影圈都在研究什么才是好剧本
- C语言常用函数-chmod()改变文件访问方式函数
- 构建一个WooCommerce付款扩展
- docker 安装后无权限问题
- jquery设置html样式无效果,jquery 改变css不生效问题
- 索佳CX系列和CX-50全站仪使用说明书
- jquery按下标获取元素_jquery获取元素的方法