排序算法c语言描述---归并排序

排序算法系列学习,主要描述冒泡排序,选择排序,直接插入排序,希尔排序,堆排序,归并排序,快速排序等排序进行分析。

文章规划:

一。通过自己对排序算法本身的理解,对每个方法写个小测试程序。 具体思路分析不展开描述。

二。通过《大话数据结构》一书的截图,详细分析该算法 。

 在此,推荐下程杰老师的《大话数据结构》一书,当然不是打广告,只是以一名读者的身份来客观的看待这本书,确实是通俗易懂,值得一看。

ps:一个较为详细的学习链接 http://blog.csdn.net/MoreWindows/article/category/859207


六。归并排序

一。个人理解

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

所以归并排序的核心在于先分解,再合并。

其基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。

那么如何让这二个数组组内数据有序呢?

可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。

好了,下面就是具体操作过程:

1) 将n个元素分成各含n/2个元素的子序列

2)用归并排序法对这两个子序列递归地排序

3)合并这两个已经排序好的子序列得到排序结果


归并排序的大致内容就是这样,如果有什么不理解,可以具体看下面的《大话数据结构》一书截图,具体不再重复。

直接上代码。

#include

#define Max_ 10
// 打印结果
void Show(int  arr[], int n)
{
    int i;
    for ( i=0; i

二。 《大话数据结构》一书截图分析

注:本文仅为分享知识,绝无商业用途。

如果以该种形式分享知识造成不必要的纠纷,还请第一时间告知。


排序算法c语言描述---归并排序_第1张图片排序算法c语言描述---归并排序_第2张图片排序算法c语言描述---归并排序_第3张图片排序算法c语言描述---归并排序_第4张图片排序算法c语言描述---归并排序_第5张图片排序算法c语言描述---归并排序_第6张图片排序算法c语言描述---归并排序_第7张图片排序算法c语言描述---归并排序_第8张图片排序算法c语言描述---归并排序_第9张图片排序算法c语言描述---归并排序_第10张图片排序算法c语言描述---归并排序_第11张图片排序算法c语言描述---归并排序_第12张图片排序算法c语言描述---归并排序_第13张图片

你可能感兴趣的:(c/c++,一步一步学算法,一步步学算法)