图解排序算法-希尔排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解排序算法-希尔排序相关的知识,希望对你有一定的参考价值。

希尔排序图解:时间复杂度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 }

 

以上是关于图解排序算法-希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

图解排序算法之希尔排序

图解排序算法之希尔排序

图解排序算法之希尔排序

排序算法——希尔排序的图解代码实现以及时间复杂度分析

图解排序算法-希尔排序

八大排序算法C语言过程图解+代码实现(插入,希尔,选择,堆排,冒泡,快排,归并,计数)