C语言实现二路归并排序
二路归并排序
- 实现思想
- 将两个位置相邻的记录有序子序列归并为一个记录有序的序列。
- 时间复杂度
- 最好情况:O(nlogn)
- 最坏情况:O(nlogn)
- 平均时间复杂度:O(nlogn)
- 空间复杂度
- O(n)
- 稳定性
- 稳定
代码
#include<stdio.h>void Merge(int tr[],int r[],int i,int m,int n){int j,k;for(j=m+1,k=i;i<=m&&j<=n;k++){if(tr[i]<tr[j])r[k]=tr[i++];elser[k]=tr[j++];}while(i<=m)r[k++]=tr[i++];while(j<=n)r[k++]=tr[j++];}/*2-路归并排序【r1和r2指向的是同一块内存,对r2进行归并就是对r1进行归并】*/void MSort(int r1[],int r2[],int i,int n){int m;int tr[9];if(r1[i]==r1[n])r2[i]=r1[i];else{m=(i+n)/2;MSort(r1,tr,i,m); /*先将r1装到tr*/MSort(r1,tr,m+1,n); /*先将r1装到tr*/Merge(tr,r2,i,m,n); /*再将tr装到r2【注意不能是r1】*/}}void Output(int rcd[],int len){int i;for(i=1;i<=len;i++){ //从r[1]开始输出,r[0]作为哨兵,不输出printf("%d ",rcd[i]);}printf("\n");}void main(){int len=8; //对8个元素进行排序int rcd[9]={0,3,1,7,5,2,4,9,6}; //r[0]不存储元素,r[1]到r[8]存储元素printf("未排序的集合为:\n");Output(rcd,len);MSort(rcd,rcd,1,len); //2-路归并排序printf("从小到大排序后的集合为:\n");Output(rcd,len);}
C语言实现二路归并排序相关推荐
- 数据结构源码笔记(C语言):二路归并排序
//实现二路归并排序算法#include<stdio.h> #include<malloc.h> #define MAXE 20 //线性表中最多元素个数typedef int ...
- 二路归并排序c语言实现
二路归并排序主要运用了"分治算法",分治算法就是将一个大的问题划分为n个规模较小而结构相似的子问题. 这些子问题解决的方法都是类似的,解决掉这些小的问题之后,归并子问题的结果,就得 ...
- C语言merge sort归并排序算法(附完整源码)
C语言merge sort归并排序算法 merge sort归并排序算法的完整源码(定义,实现) merge sort归并排序算法的完整源码(定义,实现) #ifndef MERGE_SORT_H # ...
- 二路归并排序简介及其并行化
1.归并排序简介 1.1算法思想 归并排序属于比较类非线性时间排序,比较类排序中性能最佳,应用较为广泛. 归并排序是分治法(Divide and Conquer)的一个典型的应用.将已有序的子序列合并 ...
- C++实现二路归并排序算法
排序算法分为五大类,一共是有九种,如下: 插入类:直接插入排序.折半插入排序.希尔排序 交换类:冒泡排序.快速排序 选择类:简单选择排序.堆排序 归并类:二路归并排序 基数类:多关键字排序 九种算法的 ...
- 二路归并排序原理及JAVA实现
归并类排序 基本思想:首先将原始无序序列划分为两个子序列,然后分别对每个子序列递归地进行排序,最后再将有序子序列合并. 归并排序基于分治策略思想.前面提到的基于分治的快速排序重在"分&quo ...
- 二路归并排序及时间复杂度分析
序言 二路归并排序是一种效率极高的递归排序,将数组A化为有序数组时间复杂度为O(nlogn). 思想 二路归并排序分为拆分数组以及合并两个操作. 切分(自上而下)时间复杂度2*T(n/2) 每次从数组 ...
- 二路归并排序Python实现-III
二路归并排序Python实现-III 归并排序 是一种 效率比较高并且稳定的算法.时间复杂度 O(NLog(N)),空间复杂度 O(N). 归并排序(Merge Sort)是建立在归并操作上的一种有效 ...
- 数据结构——二路归并排序和基数排序
二路归并排序 算法原理 假设该数组为q,左边界为 l,右边界为 r,并设置临时数组tmp. 采用分治思想: 第一步:确定分界点: mid = l + r >>1. 第二步:递归划分左右两段 ...
- Sort List(二路归并排序)
题目链接:https://leetcode.com/problems/sort-list/description/ 题目要求:对链表进行排序,时间复杂度O(n),常数的空间复杂度 两种解法,本质上都是 ...
最新文章
- Cocos Creator 键盘监听事件
- Web服务器的工作原理
- 关于纯cs3动画的五个原创实例分享
- poj 1860 拓扑。。
- php 换行替换成p,php 换行如何替换
- 网页静态化和网页伪静态化之间的区别与选择
- java独步寻花,小班语言《江畔独步寻花》
- Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传
- i3处理器_英特尔低端霸主酷睿I3处理器又降10元!机器怎么配?为粉丝答疑
- python适合自学编程吗-孩子学编程选Scratch还是Python
- 输入一个链表,输出该链表中倒数第k个结点
- 二进制十进制间小数怎么转换
- win10录屏_win10录屏打不开怎么办?怎么给win10录制屏幕视频?
- mysql in查询效率真的低_MySql中in查询效率低的替代方法
- 笔记本 无线网联网 win10系统 ,台式机木有无线网卡,通过一根网线连接两台电脑,使台式机联网。...
- 写在而立之年到来之前
- 考研英国文学复习要点
- Android截取人物头像,Android 图片截取人物头像(仿逗拍)
- 可能是全网最详细的python安装教程(windows),小白建议收藏
- 天秤座 的个人分析,真的很准,这段时间一直在关注星座。