1. 程式人生 > >圖解排序算法-希爾排序

圖解排序算法-希爾排序

pub length per nbsp 算法 int [] lee log

希爾排序圖解:時間復雜度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 }

圖解排序算法-希爾排序