希尔排序需要选择一个增量序列,通常选为数组长度/2
代码如下:
import java.util.Arrays; public class ShellSort { public static void main(String[] args) { int[] arr = { 4, 7, 5, 3, 1, 9, 7, 0 }; System.out.println(Arrays.toString(arr)); int[]res = new int[arr.length]; res = ShellSort.shellSort(arr); System.out.println(Arrays.toString(res)); } public static int[] shellSort(int[] arr) { // 设置初始步长 int buChang = arr.length / 2; // 遍历所有步长 for (int d =buChang; d >0; d=d/2) { //遍历所有的元素(从d往后的所有元素) for (int i = d; i < arr.length; i++) { //遍历本组中的所有的元素 for(int j = i-d;j>=0; j=j-d) { if (arr[j]>arr[j+d]) { int temp=arr[j]; arr[j] = arr[j+d]; arr[j+d] = temp; } } } } return arr; } }
输出
[4, 7, 5, 3, 1, 9, 7, 0]
[0, 1, 3, 4, 5, 7, 7, 9]