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

文章规划:

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

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

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

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


六。归并排序

一。个人理解

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

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

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

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

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

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

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

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

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

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

直接上代码。

#include<stdio.h>#define Max_ 10
// 打印结果
void Show(int  arr[], int n)
{int i;for ( i=0; i<n; i++ )printf("%d  ", arr[i]);printf("\n");
}// 归并排序中的合并算法
void Merge(int array[], int left, int m, int right)
{int aux[Max_] = {0};  // 临时数组 (若不使用临时数组,将两个有序数组合并为一个有序数组比较麻烦)int i; //第一个数组索引int j; //第二个数组索引int k; //临时数组索引for (i = left, j = m+1, k = 0; k <= right-left; k++) // 分别将 i, j, k 指向各自数组的首部。{//若 i 到达第一个数组的尾部,将第二个数组余下元素复制到 临时数组中if (i == m+1){aux[k] = array[j++];continue;}//若 j 到达第二个数组的尾部,将第一个数组余下元素复制到 临时数组中if (j == right+1){aux[k] = array[i++];continue;}//如果第一个数组的当前元素 比 第二个数组的当前元素小,将 第一个数组的当前元素复制到 临时数组中if (array[i] < array[j]){aux[k] = array[i++];}//如果第二个数组的当前元素 比 第一个数组的当前元素小,将 第二个数组的当前元素复制到 临时数组中else{aux[k] = array[j++];}}//将有序的临时数组 元素 刷回 被排序的数组 array 中,//i = left , 被排序的数组array 的起始位置//j = 0, 临时数组的起始位置for (i = left, j = 0; i <= right; i++, j++){array[i] = aux[j];}
}// 归并排序
void MergeSort(int array[], int start, int end)
{if (start < end){int i;i = (end + start) / 2;// 对前半部分进行排序MergeSort(array, start, i);// 对后半部分进行排序MergeSort(array, i + 1, end);// 合并前后两部分Merge(array, start, i, end);}
}int main()
{   //测试数据int arr_test[Max_] = { 8, 4, 2, 3, 5, 1, 6, 9, 0, 7 };//排序前数组序列Show( arr_test, Max_ );MergeSort( arr_test, 0, Max_-1 );//排序后数组序列Show( arr_test, Max_ );return 0;
}

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

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

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

排序算法c语言描述---归并排序相关推荐

  1. 《数据结构与算法 Python语言描述》 读书笔记

    已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...

  2. 经典的十种排序算法 C语言版

    经典的十种排序算法(C语言版) 1.冒牌排序 冒牌排序的特点 ​ 一趟一趟的比较待排序的数组,每趟比较中,从前往后,依次比较这个数和下一个数的大小,如果这个数比下一个数大,则交换这两个数,每趟比较后, ...

  3. 数据结构python课后答案_数据结构与算法:Python语言描述 1~5章课后习题

    数据结构与算法:Python语言描述 1~5章课后习题 发布时间:2018-07-19 20:42, 浏览次数:1885 , 标签: Python MarkDown语法写的,不知道为啥上传到CSDN不 ...

  4. python实现冒泡排序算法的非递归版本_python排序算法速度比较:快速排序,归并排序,冒泡排序...

    前言 原理就不在这里说了,好多大神肯定比我这个初学者讲的好很多,推荐去B站看视频讲解,跟着手敲代码 为什么选这三个排序呢? 首先快排是必须掌握的 看看快排在最坏的情况下(O(n²)),且不使用辅助空间 ...

  5. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

  6. 数据结构与算法python描述_数据结构与算法——Python语言描述.pdf

    数据结构与算法--Python语言描述.pdf 欢迎加入非盈利Python编学习交流程QQ群783462347,群里免费提供500+本Python书籍! 欢迎加入非盈利Python编程学习交流程QQ群 ...

  7. 算法java语言描述_java语言描述数据结构与算法崔笑颜的博客

    java语言描述数据结构与算法崔笑颜的博客 冒泡排序 插入排序 选择排序 希尔排序 快速排序 归并排序 二分查找package com.demo.test; import java.util.Arra ...

  8. 八大排序算法合集 (归并排序、交换排序、插入排序、选择排序......)

    目录 一.归并排序 二.交换排序 1.快速排序 2.冒泡排序 三.插入排序 1.直接插入排序(基于顺序查找) 2.折半插入排序(基于折半查找) 3.希尔排序(基于逐趟缩小增量) 四.选择排序 0.直接 ...

  9. 九大排序算法-C语言实现及详解

    概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 我们这里说说八大排序就是内部排序. 当n较大, ...

最新文章

  1. mybatis mysql 配置文件_Mybatis配置文件详解(4)
  2. 精选机器学习开源项目Top10
  3. 【转载】MVC中 数据底层联合JQUERY实现动态的安全的验证机制
  4. jsp mysql 换行_jsp 操作 mysql 数据库
  5. SQL Sever联接查询
  6. LayoutInflater中调用系统服务
  7. [保护模式]PAE模式
  8. linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)
  9. mac 用惠普扫描仪扫描提示将对您的电脑造成伤害_惠普全能打印神器测评:15秒智能闪充、打一张仅需5分钱...
  10. eeprom 数据偶尔变成ff_关于水电站冗余配置下监控系统下发调节令偶尔不动作的案例分析...
  11. 性能测试--jmeter中的函数助手【15】
  12. 【云原生Kubernetes系列第二篇】Kubernetes(k8s)核心组件(对的人兜兜转转最后还是会遇见)
  13. Hive的行列转换(行转多列、多列转行、行转单列、单列转行)
  14. 小飞鱼-致远OA 搭建借还款应用之选择借款 增加列显示
  15. 拓嘉启远:拼多多行家心得评论的作用
  16. 读《多头自注意力层和卷积层的关系》笔记
  17. 【图像转换】基于matlab灰度图像转换彩色图像【含Matlab 1233期】
  18. iframe载入完成时的事件监听
  19. Ping网关间歇性丢包,Ping同局域网电脑正常
  20. 02: 实现发布帖子功能

热门文章

  1. Appium 自动化测试 手机操作
  2. [CF1603D]Artistic Partition
  3. 粽子大战 —— 猜猜谁能赢
  4. 2020-03 前端技术汇总
  5. stm32f105vct6例程_STM32F105VCT6_USB_TEST
  6. preg_match详解
  7. STM32单片机扫雷游戏TFT触摸操作单片机小游戏
  8. C语言之write()函数解析:Write Failed Bad address
  9. 有哪些能支持epub、txt格式的电子书阅读器?能在MAC上用的?
  10. C语言学习笔记-有符号数和无符号数相加的问题