码迷,mamicode.com
首页 > 编程语言 > 详细

[数据结构] 几种排序算法

时间:2018-02-22 13:41:03      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:直接   div   数据   二次   font   ==   情况下   style   image   

  插入排序

  直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的元素,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。

 

  设数组为a[0…n-1]。

 

  1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1

 

  2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。

 

  3. i++并重复第二步直到i==n-1。排序完成。

 

  希尔排序

  希尔排序的实质就是分组插入排序。

  该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由序号相差某个“增量”的元素组成的),分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的。

  一般我们进行希尔排序时,会取增量gap=数组长度/2,每完成一次这个gap下分组的直接插入排序后,将gap再次除以2得到新的gap。例子如下:

  { 49,38,65,97,26,13,27,49,55,4 },这是一个长度n=10的数组,我们对它进行从小到大的排序

  ① gap = 10/2 = 5,

          技术分享图片

  1A,1B为一组,2A,2B为一组......我们将数据分成了五组:{ 49,13 },{ 38,27 },{ 65,49 },{ 97,55 },{ 26,4 }。我们对这五组数据分别进行插入排序,得到了{ 13,49 },{ 27,48 },{ 49,65 },{ 55,97 },{ 4,26 },放回原来的数组,我们开始第二次:

  ② gap = 5/2 = 2,

    技术分享图片

  我们得到了{ 13,49,4,38,97},{ 27,55,49,65,26 }。将这两组数据再一次进行插入排序我们得到 { 4,13,38,49,97 },{ 26,27,49,55,65 },保持他们在原数组中的位置,我们开始第三次:

  ③ gap = 2/2 = 1,

  技术分享图片

  这一次我们得到 { 4,26,13,27,38,49,49,55,97,65 },再进行插入排序得到 { 4,13,26,27,38,49,49,55,65,97 },最后我们得到了完成排序的数组:

  ④ gap = 1/2 = 0:

  技术分享图片

 

  快速排序

  堆排序

  二路归并排序

  基数排序

  排序算法间的比较

 

[数据结构] 几种排序算法

标签:直接   div   数据   二次   font   ==   情况下   style   image   

原文地址:https://www.cnblogs.com/OranBlog/p/8458171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!