C语言之归并排序算法
一、什么是归并排序?
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
二、归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
三、C语言程序代码
#include<stdio.h>
int guibing(int *p,int *q,int left,int mid,int right);
int main(void)
{
int i;
int d[]={0};
int p[10]={2,4,6,8,0,1,3,5,7,9};
guibing(p,d,0,3,9);
for(i=0;i<10;i++)
{
printf("%d,",d[i]);
}
return 0;
}
//将两个排好序的序列归并到一个数组里
int guibing(int *p,int *q,int left,int mid,int right)//mid是第一个数组的最后一个下表 ,q是归并排列好的数组
{
int i,j,k;
i=left;
j=mid+1;
k=left;//k是排好序的第一个元素的下表
while(i<=mid&&j<=right)
{
if(p[i]<p[j])
{
q[k]=p[i];
k++;
i++;
}
else
{
q[k]=p[j];
k++;
j++;
}
if(i>mid)
while(j<=right)
q[k++]=p[j++];
else if(i<=mid)
while(j>right)
q[k++]=p[i++];
}
}
转载于:https://blog.51cto.com/xxr007/1833476
C语言之归并排序算法相关推荐
- c语言归并排序代码详细注释,C语言实现归并排序算法
C语言实现归并排序算法 归并排序是创建在归并操作上的一种有效的排序算法.下面小编为大家整理了C语言实现归并排序算法,希望能帮到大家! 归并排序(Merge sort)是创建在归并操作上的一种有效的排序 ...
- 归并排序算法怎么优化?本文给你讲清楚
排序算法是一种能将一系列数据按照特定顺序进行排列的算法,比如说一个学校的考试分数从高到低排名.一个公司的数据报表从大到小排列,都需要用到排序算法.常见的排序算法有冒泡排序.快速排序.字典排序.归并排序 ...
- C语言merge sort归并排序算法(附完整源码)
C语言merge sort归并排序算法 merge sort归并排序算法的完整源码(定义,实现) merge sort归并排序算法的完整源码(定义,实现) #ifndef MERGE_SORT_H # ...
- 【经典回放】多种语言系列数据结构算法:归并排序
目录 干货1:C#语言实现归并排序! 干货2:C语言实现归并排序! 干货1:C#语言实现归并排序! 一.算法 1.思想基础
- aes算法实现c语言_以C语言实现归并排序为例,谈谈五大常用算法之一的“分治法”...
分治算法,顾名思义就是"分而治之",即把规模较大的复杂问题拆分为若干规模较小的类似子问题,并逐个解决,最后再将各个子问题的解决结果合并,得到原始问题的结果的方法.这个技巧是很多高效 ...
- 归并排序算法(C语言版本)
基本思想 归并排序(Merge Sort)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分成一些小的问题然后进行递归求解,而治的阶段则将 ...
- c语言归并排序代码详细注释,C语言实现排序算法之归并排序详解
排序算法中的归并排序(Merge Sort)是利用"归并"技术来进行排序.归并是指将若干个已排序的子文件合并成一个有序的文件. 一.实现原理: 1.算法基本思路 设两个有序的子文件 ...
- 2路归并排序算法(C语言)
转载自:http://blog.csdn.net/caryaliu/article/details/7475700 将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序,下面有自底向上和自顶 ...
- 归并排序算法详解(方法一)之C语言版
一.算法原理 归并排序是一种常用的排序算法,属于稳定排序法,其时间复杂度为 归并排序就是将两个已经分别排好序的数组A和B合并为一个排好序的数组C. 如果数组散乱的数组,则需要将数组元素分别按照长度为d ...
最新文章
- 【数学建模】MATLAB从入门到精通:Logistic模型原理及应用案例(附MATLAB代码)
- 1231 最优布线问题
- UVA - 11882Biggest Number dfs+期望剪枝
- Dockerd docker-containerd docker-containerd-shim runC
- ios sqlite3 初级应用
- pandas如何通过函数修改某一列的值?
- java多线程通信_Java多线程-线程通信
- 杀破狼java_终于把《杀破狼》看完了
- `ECS弹性计算服务
- lammps教程:group命令详解
- MySQL之MHA集群的详细教程
- 天龙八部3新扫地僧辅助 全功能专业刷马贼脚本功能介绍
- 第二章 python自定义函数与类(一)
- 入门物联网需要服务器
- 矩阵乘法计算量估算/华为机试(C/C++)
- 我的python中级班学习之路(全程笔记第一模块) (第二章)(第3部分:元祖、哈希(hash)、字典、集合...
- hibernate工作机制
- EUV 光刻机到底有多重要?
- Lettuce: Connection to x.x.x.x not allowed. This connection point is not known in the cluster view
- JAVA实现简单数据采集
热门文章
- feign返回null_109、Feign的服务降级和Turbine
- python抓取数据库数据封装成json_用Python将mysql数据导出成json的方法
- c++读取.dat文件_MySQL 数据文件类型
- html5场景编辑工具,3款容易上手的HTML5编辑工具推荐~
- linux下crontab allow,Linux下crontab命令的用法
- python雷达图详解_python的matplotlib---雷达图
- 子程序与中断程序的异同_专业解读PLC编程中断的原理和用法
- 图像“位操作”有什么用?
- 【视频课】模型部署课程更新!ncnn框架快速实践!
- 【通知】有三AI固态硬盘最后一次补货,再增3套视频!