实现原理:
-
选择增量:选择一个大于1的增量序列,通常使用的序列是 𝑛/2n/2,𝑛/4n/4,...,1。
-
进行排序:对间隔为增量的元素进行插入排序。
-
减少增量:减少增量,重复上述过程。
-
增量为1:当增量减少到1时,算法就变成了普通的插入排序,但由于数据已经部分有序,所以这个过程会非常快。
package 八大排序; import java.util.Arrays; //希尔排序,插入排序的优化 public class ShellSort { public static void main(String[] args) { int[] arr = {1,4,6,3,2,56,3,-12,-33,76,100}; sort(arr); System.out.println(Arrays.toString(arr)); } public static void sort(int[] arr) { for(int grp = arr.length/2;grp>=1;grp = grp / 2){ for (int i = grp; i < arr.length; i++) { for (int j = i-grp;j>=0;j =j-grp){ if(arr[j+grp]<arr[j]){ int temp = arr[j]; arr[j] = arr[j+grp]; arr[j+grp] = temp; }else break; } } } } }