希尔排序
希尔排序:是对插入排序的优化,核心思想是合理的选取增量,经过排序后会让序列大致有序,在通过缩小增量继续进行比较交换,直至增量为1,使得序列完全有序。
增量的选取:一般选择数组长度的一半作为起始增量,在通过对半缩减,直至增量等于1,完成希尔排序。
在选取增量时选取数组一半从效率方面来说不是很好,从而引入了克努特序列作为增量的表达式;
原理图解如下:
根据上述流程图进行排序。
代码实现如下:
package Org.Westos.Demo;
import java.util.Arrays;
public class lianxi5 {
public static void main(String[] args) {
int[] arr = {12, 22, 2, 3, 55, 11, 46, 5, 1, 99, 78, 13};
for (int d = arr.length/2; d >0; d/=2) {
for (int i= d; i < arr.length; i++) {
for (int j = i; j >d-1; j-=d) {
if (arr[j]<arr[j-d]){
int t=arr[j];
arr[j]=arr[j-d]