实现原理:
1.选择增量:选择一个大于1的增量序列,通常使用的序列是 𝑛/2n/2,𝑛/4n/4,...,1。
2.进行排序:对间隔为增量的元素进行插入排序。
3.减少增量:减少增量,重复上述过程。
4.增量为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;
}
}
}
}
}