package com.edu.hpu.sort.insert.shell; import java.util.Arrays; import com.edu.hpu.sort.Sort; public class ShellSort extends Sort { @Override public int[] doSort(int[] arr) { int len = arr.length; // 所有的步长可能性(首次为数组长的一半,接下来每次为上一次的一半) for (int gap = len / 2; gap > 0; gap /= 2) { // 将步长中的所有元素进行插入排序 for(int w = 0; w < gap; w++){ // 步长为gap的插入排序 // 对照插入排序 /* * for(int i = p + 1; i < r; i++){ * int key = arr[i]; * int j = i - 1; * while(j >= 0 && arr[j] > key) { * arr[j + 1] = arr[j]; * j--; * } * arr[j + 1] = key; * } */ for (int i = gap + w; i < len; i += gap) { // 插入排序 int key = arr[i]; int j = i - gap; while (j >= 0 && arr[j] > key) { arr[j + gap] = arr[j]; j -= gap; } arr[j + gap] = key; } } System.out.println(Arrays.toString(arr)); } return arr; } public static void main(String[] args) { Sort sort = new ShellSort(); sort.printOrder(new int[] {100, 201, 999, 4, 1, 3, 2, 16, 9, 100, 194, 8, 7, 0, 90 }); } }
时间: 2024-11-11 11:24:10