圖解排序算法-希爾排序
阿新 • • 發佈:2017-11-29
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 @Override15 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 }
圖解排序算法-希爾排序