希爾排序 java實現
阿新 • • 發佈:2018-11-08
希爾排序屬於插入排序的一種,也稱為縮小增量法,是插入排序的一種改進版本,其基本思想是,先取一個小於n的整數i1作為第一個增量,所有距離為a的記錄放在同一組,把陣列的全部記錄分成了a組子序列,再對各組子序列進行直接插入排序,然後,取第二個增量i2作為第二個增量,重複分組和排序,直到最後一個增量為1時,對所有元素進行直接插入排序。希爾排序是對直接插入排序演算法的優化,實質上是一種分組插入排序演算法。
程式碼
package demo;
import java.util.Arrays;
//希爾排序
public class ShellSort {
public static void main(String[] args) {
int[] data = new int[] {18,32,3,6,21,42,35,27,34,89,53};
shellSort(data);
}
private static void shellSort(int[] data) {
//此處迴圈增量 5、2、1
for (int increment = data.length / 2; increment > 0; increment /= 2) {
for (int i = increment; i < data.length; i++) {
int j=0;
int temp = data[i];
for (j = i; j >= increment; j -= increment) {
if(temp > data[j - increment]){
data[j] = data[j - increment];
}else {
break;
}
}
data[j] = temp;
}
System.out.println("增量為"+increment+"時排序結果為:"+Arrays.toString(data));
}
}
}
執行結果: