交换法:
//希尔排序 --> 交换法public static void shellSort(int[] arr) {int temp;//增量:gap,并逐步缩小增量for (int gap = arr.length / 2; gap > 0; gap /= 2) {for (int i = gap; i < arr.length; i++) {//遍历各组中所有的元素(共gap组,每组有arr.length / gap个元素),步长gapfor (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("排序后:");// System.out.println(Arrays.toString(arr));}
位移法:
//希尔排序 --> 移位法public static void shellSort2(int[] arr) {int temp;int j;//增量:gap,并逐步缩小增量for (int gap = arr.length / 2; gap > 0; gap /= 2) {//从此gap个元素,逐个对其所在的组进行直接插入排序for (int i = gap; i < arr.length; i++) {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;}}}// System.out.println("排序后:");// System.out.println(Arrays.toString(arr));}
