对归并排序进行c语言编程实现,归并排序及C语言实现
排序系列之(1)归并排序及C语言实现
有很多算法在结构上是递归的:为了解决一个给定的问题,算法需要一次或多次递归的调用其本身来解决相关的问题。这些算法通常采用分治策略:将原问题划分成n个规模较小而结构与原问题相似的子问题;递归的解决这些子问题,然后将结果合并,就能得到原问题的解。
分治模式在递归时一般都有三个步骤
分解:将原问题分解成一系类子问题
解决:递归的解各子问题。若子问题足够小,则直接求解。
合并:将子问题的结果合并成原问题的解。
归并排序在算法上完全依照了上述模式,操作如下。
分解:将n个元素分解成n/2个元素的子序列
解决:用合并排序法对两个子序列递归地排序
合并:将子问题的结果合并原问题的解。
以下是源代码实现
view plaincopy to clipboardprint?
void mergeSort(int a[],int left,int right)
{
int i;
// 保证至少有两个元素
if(left < right)
{
i = (left+right)/2;
mergeSort(a,left,i);
mergeSort(a,i+1,right);
merge(a,left,right);
}
}
void merge(int a[],int left,int right)
{
int begin1 = left;
int mid = (left+right)/2 ;
int begin2 = mid+1;
int k=0;
int newArrayLen = right-left+1;
int *b = (int*)malloc(newArrayLen*sizeof(int));
while(begin1<=mid && begin2<=right)
{
if(a[begin1]<=a[begin2])
b[k++] = a[begin1++];
else
b[k++] = a[begin2++];
}
while(begin1<=mid)
b[k++] = a[begin1++];
while(begin2<=right)
b[k++] = a[begin2++];
copyArray(b,a,newArrayLen,left);
free(b);
}
/**
* 复制数组
* source:源数组
* dest:目标数组
* len:源数组长度
* first:目标数组起始位置
*
*/
void copyArray(int source[], int dest[],int len,int first)
{
int i;
int j=first;
for(i=0;i
{
dest[j] = source[i];
j++;
}
}
void mergeSortTest()
{
int a[] = {5, 18, 151, 138, 160, 63, 174, 169, 79, 200};
int len = sizeof(a)/sizeof(int);
showArray(a,len);
mergeSort(a,0,len-1);
showArray(a,len);
}
对归并排序进行c语言编程实现,归并排序及C语言实现相关推荐
- 高斯消元法的c语言编程,列主元高斯消元法的C语言编程
列主元高斯消元法的C语言编程 列主元高斯消元法 基本思想:用高斯消元法求解线性方程组时,为避免小的主元,在进行第k步消元前,应该在第k列(k)元素aik(i k,(k)(k)例如|aikk| max| ...
- c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...
双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好 首页 > 软件 > 双辽c语言编程学习 作者:镀金池 发布时间:2017-12-07 05:48 一个C语 ...
- c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...
九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会 首页 > C语言 > 九江c语言编程学习 作者:镀金池 发布时间:2017-10-18 14:11 据ID ...
- c语言编程期刊论文管理系统,C语言编程下计算机软件论文
1计算机软件C语言的编程实验 1.1计算机软件C语言的编程技巧 计算机软件C语言的编程中,最主要的依据是指针应用,C语言指针能够根据软件程序的编写需求,构建可行的函数,而程序员在设计函数编程的过程中, ...
- c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...
丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池 发布时间:2018-04-09 16:40 在之后 ...
- 江门C语言培训,江门c语言编程学习,江门学c语言编程培训,江门学c语言编程效果怎么样...
江门c语言编程学习,江门学c语言编程培训,江门学c语言编程效果怎么样 首页 > C语言 > 江门c语言编程学习 作者:镀金池 发布时间:2017-10-18 09:25 在初期的C语言 ...
- C语言报名里面培训怎么填,庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样...
庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样 首页 > 软件 > 庄河c语言编程学习 作者:镀金池 发布时间:2017-11-29 11:13 明天利用时 ...
- 罗定c语言,罗定学c语言编程,罗定学c语言编程培训,罗定学c语言编程一般怎么收费...
罗定学c语言编程,罗定学c语言编程培训,罗定学c语言编程一般怎么收费 首页 > 软件 > 罗定学c语言编程 作者:镀金池 发布时间:2018-10-04 23:40 依照c语言的法则, ...
- 安庆师范大学c语言程序设计,安庆c语言编程学习,安庆学c语言编程培训,安庆学c语言编程一般能拿多少工资...
安庆c语言编程学习,安庆学c语言编程培训,安庆学c语言编程一般能拿多少工资 首页 > C语言 > 安庆c语言编程学习 作者:镀金池 发布时间:2017-10-18 15:20 假定我们 ...
- 汕头c语言培训班,汕头c语言编程学习,汕头学c语言编程哪个好,汕头学c语言编程需要报培训班吗...
汕头c语言编程学习,汕头学c语言编程哪个好,汕头学c语言编程需要报培训班吗 首页 > C语言 > 汕头c语言编程学习 作者:镀金池 发布时间:2017-10-18 20:12 经历:若 ...
最新文章
- Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
- Bioinformatics: Assembling Genomes (week 1-2)
- SQL-23 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列...
- 常用的Net Command
- 学了这些技术就能轻松找到一份待遇不错的岗位
- BCE loss和 CE理解
- postman 变量
- RabbitMQ code=200, text=Goodbye比较萌新的问题大佬绕道,乌拉~!
- 计算机网络技术中的数据通信
- c语言 显示 图形界面,「分享」C语言如何编写图形界面
- java 搭建 web服务器 socket实现
- 清华大学王媛老师的讲座
- 1.3、Bootstrap V4自学之路------起步---浏览器支持
- springmvc 传对象报400_springmvc 通过对象来接收参数,为什么默认会返回该对象?
- 微软遭30万人实名抗议:非人道的1914万美元,能不能别赚?
- Spring Boot 打的包为什么能直接运行?
- 贾君鹏你妈妈喊你回家吃饭-利用WCF的Duplex推送消息
- extern dllInport用法
- 卸载Oracle 12c
- 网络爬虫:Scrapy爬虫框架
热门文章
- 【日常排雷】 .Net core 生产环境appsetting读取失败
- 马斯克推崇的第一性原理,究竟有多重要?
- 研发协同平台数据库死锁处理及改进
- 直接使用汇编编写 .NET Standard 库
- Docker:使用本地卷和tmpfs挂载
- .NET Core MVC扩展实践
- 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本
- .NET Core3.0创建Worker Services
- Tuple VS ValueTuple
- ASP.NET Core on K8S学习初探(3)部署API到K8S