排序系列之(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语言实现相关推荐

  1. 高斯消元法的c语言编程,列主元高斯消元法的C语言编程

    列主元高斯消元法的C语言编程 列主元高斯消元法 基本思想:用高斯消元法求解线性方程组时,为避免小的主元,在进行第k步消元前,应该在第k列(k)元素aik(i k,(k)(k)例如|aikk| max| ...

  2. c语言程序设计自学跟谁好,双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好...

    双辽c语言编程学习,双辽学c语言编程哪个好,双辽学c语言编程自学好还是报班好 首页 > 软件 > 双辽c语言编程学习 作者:镀金池   发布时间:2017-12-07 05:48 一个C语 ...

  3. c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...

    九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会 首页 > C语言 > 九江c语言编程学习 作者:镀金池   发布时间:2017-10-18 14:11 据ID ...

  4. c语言编程期刊论文管理系统,C语言编程下计算机软件论文

    1计算机软件C语言的编程实验 1.1计算机软件C语言的编程技巧 计算机软件C语言的编程中,最主要的依据是指针应用,C语言指针能够根据软件程序的编写需求,构建可行的函数,而程序员在设计函数编程的过程中, ...

  5. c语言编程学多久,丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会...

    丰城c语言编程学习,丰城学c语言编程的学校,丰城学c语言编程一般要多久才能学会 首页 > 软件 > 丰城c语言编程学习 作者:镀金池   发布时间:2018-04-09 16:40 在之后 ...

  6. 江门C语言培训,江门c语言编程学习,江门学c语言编程培训,江门学c语言编程效果怎么样...

    江门c语言编程学习,江门学c语言编程培训,江门学c语言编程效果怎么样 首页 > C语言 > 江门c语言编程学习 作者:镀金池   发布时间:2017-10-18 09:25 在初期的C语言 ...

  7. C语言报名里面培训怎么填,庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样...

    庄河c语言编程学习,庄河学c语言编程培训,庄河学c语言编程报个培训班怎么样 首页 > 软件 > 庄河c语言编程学习 作者:镀金池   发布时间:2017-11-29 11:13 明天利用时 ...

  8. 罗定c语言,罗定学c语言编程,罗定学c语言编程培训,罗定学c语言编程一般怎么收费...

    罗定学c语言编程,罗定学c语言编程培训,罗定学c语言编程一般怎么收费 首页 > 软件 > 罗定学c语言编程 作者:镀金池   发布时间:2018-10-04 23:40 依照c语言的法则, ...

  9. 安庆师范大学c语言程序设计,安庆c语言编程学习,安庆学c语言编程培训,安庆学c语言编程一般能拿多少工资...

    安庆c语言编程学习,安庆学c语言编程培训,安庆学c语言编程一般能拿多少工资 首页 > C语言 > 安庆c语言编程学习 作者:镀金池   发布时间:2017-10-18 15:20 假定我们 ...

  10. 汕头c语言培训班,汕头c语言编程学习,汕头学c语言编程哪个好,汕头学c语言编程需要报培训班吗...

    汕头c语言编程学习,汕头学c语言编程哪个好,汕头学c语言编程需要报培训班吗 首页 > C语言 > 汕头c语言编程学习 作者:镀金池   发布时间:2017-10-18 20:12 经历:若 ...

最新文章

  1. Newtonsoft.Json.dll 本地调用正常,服务器调用不正常
  2. Bioinformatics: Assembling Genomes (week 1-2)
  3. SQL-23 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列...
  4. 常用的Net Command
  5. 学了这些技术就能轻松找到一份待遇不错的岗位
  6. BCE loss和 CE理解
  7. postman 变量
  8. RabbitMQ code=200, text=Goodbye比较萌新的问题大佬绕道,乌拉~!
  9. 计算机网络技术中的数据通信
  10. c语言 显示 图形界面,「分享」C语言如何编写图形界面
  11. java 搭建 web服务器 socket实现
  12. 清华大学王媛老师的讲座
  13. 1.3、Bootstrap V4自学之路------起步---浏览器支持
  14. springmvc 传对象报400_springmvc 通过对象来接收参数,为什么默认会返回该对象?
  15. 微软遭30万人实名抗议:非人道的1914万美元,能不能别赚?
  16. Spring Boot 打的包为什么能直接运行?
  17. 贾君鹏你妈妈喊你回家吃饭-利用WCF的Duplex推送消息
  18. extern dllInport用法
  19. 卸载Oracle 12c
  20. 网络爬虫:Scrapy爬虫框架

热门文章

  1. 【日常排雷】 .Net core 生产环境appsetting读取失败
  2. 马斯克推崇的第一性原理,究竟有多重要?
  3. 研发协同平台数据库死锁处理及改进
  4. 直接使用汇编编写 .NET Standard 库
  5. Docker:使用本地卷和tmpfs挂载
  6. .NET Core MVC扩展实践
  7. 超简单让.NET Core开发者快速拥有CI/CD的能力-Docker版本
  8. .NET Core3.0创建Worker Services
  9. Tuple VS ValueTuple
  10. ASP.NET Core on K8S学习初探(3)部署API到K8S