归并算法(详细见解)
原理:使用递归方法来实现归并排序时,主要是两个“有序子序列”的合并
(1)将待排序序列从中间一分为二,对左右两边再进行递归分割操作,使用递归,得到n个相互独立的子序列(过程像二叉树那样);
(2)对n个独立的子序列递归的执行合并操作,最终得到有序的序列。
( 80,30,60,40,20,10,50,70)
(80,30,60,40) (20,10,50,70)
(80,30) (60,40) ( 20,10) (50,70)
( 80) (30) (60) (40) (20) (10) (50) (70)(第一步)
(30,80) (40,60) (10,20) (50,70)
(30,40,60,80) (10,20,50,70)
(10,20,30,40,50,60,70,80) (第二步)
最后归并的时候方法
#include<stdio.h>
#include<stdlib.h>
void fun(int a[],int l,int avg,int rend){int *tmp=(int *)malloc(sizeof(int));//开辟空间 int i=l;//l是左边数组下标 int j=avg+1;//avg是中间的数加1是右边数组下标 int k=0;while(i<=avg&&j<=rend){ //左右两边进行比较把小的存放到tmp数组 if(a[i]<=a[j])tmp[k++]=a[i++];elsetmp[k++]=a[j++];}//左右两边进行比较把较小的数赋值给tmp数组里面 while(i<=avg)//把左边剩余的数组元素传入tmp数组 tmp[k++]=a[i++];while(j<=rend)//把右边剩余的数组元素传入tmp数组 tmp[k++]=a[j++];for(i=0;i<k;i++)//把新数组中的数覆盖到a数组中 a[l+i]=tmp[i]; }
void fun1(int a[],int l,int rend){if(a==NULL||l>=rend)return;int avg=(l+rend)/2;fun1(a,l,avg);//左边数组排序 fun1(a,avg+1,rend);//右边数组排序 fun(a,l,avg,rend);//合并左右数组
}
int lenght(int a[]){//读取数组长度 int count;while(a[count]!='\0'){count++;}return count;
}
int main(){int i;int a[]={80,30,60,40,20,10,50,70};int ilen=lenght(a);printf("before sort:");for(i=0;i<ilen;i++)printf("%d ",a[i]);printf("\n");fun1(a,0,ilen-1);printf("after sort:");for(i=0;i<ilen;i++)printf("%d ",a[i]);printf("\n");return 0;
}
fun1递归的得到是n个子序列
fun在对有序子序列进行归并
输入进行归并算法,将主函数调换即可
int main(){int a[999],n,i;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);fun1(a,0,n-1);for(i=0;i<n;i++)printf("%d ",a[i]);return 0;}
归并算法(详细见解)相关推荐
- 十大经典排序算法详细总结 图形展示 代码示例
文章目录 十大经典排序算法详细总结 0.排序算法说明 1.冒泡排序(Bubble Sort) 2.选择排序(Selection Sort) 3.插入排序(Insertion Sort) 4.希尔排序( ...
- Yolov1目标检测算法详细分析
Yolov1目标检测算法详细分析 Yolov1介绍 这是继RCNN,fast-RCNN 和 faster-RCNN之后,rbg(Ross Girshick)大神挂名的又一大作,起了一个很娱乐化的名字: ...
- 【转】卡尔曼滤波算法详细推导(相当值得一看)
转载自 卡尔曼滤波算法详细推导 这一篇对预备知识的介绍还是很好的,过程与原理讲解也很到位,应该是目前看到中文里最好的讲解了. 一.预备知识 1.协方差矩阵 是一个维列向量,是的期望 ...
- 红黑树(一)之 原理和算法详细介绍---转帖
目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添加 6 红黑树的基本操作(三) 删除 作者:Sky W ...
- 红黑树(一)之 原理和算法详细介绍
出处:http://www.cnblogs.com/skywang12345/p/3245399.html 概要 目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树 ...
- 基于Fork/Join框架实现对大型浮点数数组排序(归并算法和插入排序算法)
分支/合并框架 说明 重点是那个浮点数数组排序的例子,从主函数展开,根据序号看 1.GitHub代码欢迎star.你们轻轻的一点,对我鼓励特大,我有一个习惯,看完别人的文章是会点赞的. 2.个人认为学 ...
- python分割数字_对python数据切割归并算法的实例讲解
当一个 .txt 文件的数据过于庞大,此时想要对数据进行排序就需要先将数据进行切割,然后通过归并排序,最终实现对整体数据的排序.要实现这个过程我们需要进行以下几步:获取总数据行数:根据行数按照自己的需 ...
- Madgwick算法详细解读
Madgwick算法详细解读 极品巧克力 前言 接上一篇文章<Google Cardboard的九轴融合算法>. Madgwick算法是另外一种九轴融合的方法,广泛应用在旋翼飞行器上,效果 ...
- 由归并算法引申出来的其他问题
前言: 上一节刚讲过归并算法是排序算法中比较少见的一种时间复杂度为:θ(nlgn)的算法.而归并算法之所以快的原因在于它用了分治的思想,现实生活中有很多需要用到分治思想解决的问题,下面就举两个例子. ...
- CRC32算法详细推导(3)
From:http://blog.csdn.net/sparkliang/article/details/5671543 CRC32算法详细推导(3) 郁闷的位逆转 看起来我们已经得到 CRC-32 ...
最新文章
- HTML5表单的创建及与PHP的交互
- 百度api:根据经纬度获取地理位置信息
- 旋转动画用控件RotateView
- 面试题 异常的抛出和捕获
- 计算机初试占比高的学校,复试压力小,初试占比70%及以上的院校汇总!
- 【历史上的今天】8月19日:大型计算机先驱和小型机之父诞生;中国雅虎邮箱成历史...
- 为普通用户添加root权限
- 混淆Android JAR包的方法
- mysql导入数据库没创建表_mysqldump不会创建表或导入任何数据
- 题解 P3835 【【模板】可持久化平衡树】
- python使用redis做缓存_Python的Flask框架使用Redis做数据缓存的配置方法
- SQL语句:查询多表更新数据
- 软考论文-写作大纲-备考思路总结
- 期刊分类abcde_ABCD期刊分类目录
- 绘画软件:krita for Mac
- html thead作用,HTML thead 标签定义和用法详细介绍
- 自媒体人写稿必备的工具
- 校招 - 行业测评题、图形推理题、逻辑思维面试题,解题技巧汇总
- TAGS::Vim进阶索引[7]
- Java RGB转色温(CCT)