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

希尔排序

时间:2015-07-18 16:46:08      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

一 希尔排序

  希尔排序是优化的直接插入排序,直接插入排序可以看做是增量为1的希尔排序。希尔排序又称为缩小增量排序。

二 直接插入排序

  直接插入排序是两个for循环,第一层for的i从step开始向后直到小于len,并取base=array[step],第二层for的j从i-step开始向前直到0或者array[j]<=base。

  希尔排序从大增量开始,每次缩小增量进行直接插入排序。

  ① Shell增量序列 {N, N/2, N/2/2, ... , 1}

  ② Hibbard增量序列 {1, 3, 7, ..., 2^k-1}

  ③ Sedgewick增量序列 {1, 5, 19, 41, ...}  

    序列一:9 * 4^i - 9 * 2^i + 1 -- 1, 19, 109 

    序列二:2^(i+2) * (2^(i+2) -3) + 1 -- 5, 41

 1 void insertSort(int *myArray, int step, int len)
 2 {
 3     for (int i=step; i < len; i+=step)
 4     {
 5         int base = myArray[i];
 6 
 7         int j=i-step;
 8         for (; j>=0 && myArray[j]>base; j-=step)
 9             myArray[j+step] = myArray[j];
10         myArray[j+step] = base;
11     }
12 }
13 
14 void shellSort(int *myArray, int len)
15 {
16      insertSort(myArray, 5, len);
17      insertSort(myArray, 1, len);
18 }

 

希尔排序

标签:

原文地址:http://www.cnblogs.com/yoleimei/p/4657083.html

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