排序六:希尔排序
public class Six { static int[] arr; public static void one() { int len = arr.length; int counter = 1; int h = 1; while(3*h+1 <len) { //确定第一轮的时间间隔 (时间间隔由大到小) h=3*h+1; } while(h>0) { //重复执行,一直到时间间隔=0; for(int i =0;i<h;i++) { shellInsertSort(i,h); } h= (h-1)/3; //下一轮的时间间隔 } } private static void shellInsertSort(int beginIndex, int increment) { int targetment = beginIndex+increment;//欲插入的元素下标 while(targetment < arr.length) { int temp = arr[targetment]; //先保存 int previousIndex = targetment - increment ;//前一个元素的下标 while(previousIndex >=0 &&arr[previousIndex] >temp) { arr[previousIndex+increment] = arr[previousIndex]; previousIndex = targetment - increment; } arr[previousIndex+increment] = temp; //插入元素 targetment = targetment + increment; } } }
天助自助者