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

希尔排序

时间:2015-03-05 23:35:41      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

希尔排序算法

  一、基本思想:分组增量插入方法,先取定一个小于 n 的整数 d1 作为第一个增量,把表的全部记录分成 d1 个组,所有间距为 d1 的倍数的记录放置在同一个组,再在各组内进行直接插入排序,依次类推,直至所取的增量 di=1,即将所有的记录都放置在同一个组中进行直接插入排序为止。

  

  技术分享

 

  二、C 语言代码:

  

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 //取 di = n/2, di+1 = di/2
 5 void shellSort(SqList R[], int n)
 6 {
 7     int i; 
 8     int j; 
 9     int gap; 
10     SqList tmp; 
11     gap = n/2; //为增量设置初值 
12     
13     //对所有相隔 gap 位置的所有元素组采用直接插入排序 
14     while (gap > 0) { 
15         for (i = gap; i < n; i++) { 
16             tmp = R[i]; 
17             j = i - gap; 
18             while (j >= 0 && tmp.key < R[j].key) { 
19                 R[j+gap] = R[j]; 
20                 j = j - gap; 
21             } 
22             R[j+gap] = tmp; 
23         } 
24         gap = gap/2; //减少增量 
25     } 
26 } 

  

  三、算法分析

    希尔排序算法的性能分析是一个复杂的问题,因为增量的选取不是一个定值,假若按照本文所述,di = n/2, di+1 = di/2,即后一个增量是前一个增量的 1/2,经过 T=log2(n-1) 次增量后,di=1。

    时间复杂度:希尔排序的算法的时间复杂度难以分析,一般认为是 O(n1.3)。

    空间复杂度:由算法代码可知,所需的额外空间只有一个 tmp 变量,故希尔排序算法空间复杂度为 O(1)。

 

  四、思考

    希尔排序算法与直接插入排序算法的原理和思想是一致的,那么,为什么希尔排序算法的性能要优于直接插入排序?

 

 

 

 
 

希尔排序

标签:

原文地址:http://www.cnblogs.com/lishiyun19/p/4316903.html

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