示意图
代码实现:
//交换法 private static void shellSort(int[] arr) { int temp=0; int count=0; for (int gap=arr.length/2;gap>0;gap/=2){ for (int i = gap; i <arr.length ; i++) { for (int j = i-gap; j >=0 ; j-=gap) { if (arr[j]>arr[j+gap]){ temp=arr[j]; arr[j]=arr[j+gap]; arr[j+gap]=temp; } } } //System.out.println("第"+(++count)+"次排序后:"+Arrays.toString(arr)); } } //移位法 private static void shellSortMove(int[] arr) { int temp=0; for (int gap = arr.length/2; gap >0 ; gap/=2) { for (int i = gap; i <arr.length ; i++) { int j=i; temp=arr[j]; if (arr[j]<arr[j-gap]){ while (j-gap>=0&&temp<arr[j-gap]){ arr[j]=arr[j-gap]; j-=gap; }//while退出后,给temp找到插入的位置 arr[j]=temp; } } } }