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

图解排序算法-希尔排序

时间:2017-11-29 16:14:06      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:交换   有助于   span   复杂度   插入排序   图片   data   rri   test   

希尔排序图解:时间复杂度O(nlog2n),空间复杂度O(1)

数组:[243, 5, 7, 22, 3, 11]

技术分享图片

 

核心代码实现:

 1 package org.apel.test.rp.test.sort;
 2 
 3 /**
 4  * 希尔排序
 5  * @author alex lee
 6  *
 7  */
 8 public class ShellSort extends AbstractSort{
 9 
10     public ShellSort(int[] data) {
11         super(data);
12     }
13 
14     @Override
15     public void sort() {
16         /*
17          * 步长逐渐递减,先让局部有序,有助于让最终的h=1(标准插入排序)时效率更高,减少比较次数和交换次数
18          */
19         int h = 1;
20         while(h < data.length / 3) h = 3 * h + 1;//计算步长
21         while(h >= 1) {
22             for (int i = h; i < data.length; i++) {
23                 for (int j = i; j >= h && (data[j - h] > data[j]); j -= h) {
24                     swap(data, j, j - h);
25                 }
26             }
27             h = h / 3;
28         }
29     }
30 
31 }

 

图解排序算法-希尔排序

标签:交换   有助于   span   复杂度   插入排序   图片   data   rri   test   

原文地址:http://www.cnblogs.com/madAlex/p/7920026.html

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