希尔算法学习使用代码如下
import untils.AlgorithmUtils;
import java.util.Arrays;
public class Shell {
public static void studyShellSort(int[] arr) {
System.out.print("原数组: ");
System.out.println(Arrays.toString(arr));
System.out.println("开始shell排序:--Start-- ");
int length = arr.length;
for (int len = length / 2; len > 0; len /= 2) {
boolean flag = true;
System.out.println("本次步长为: " + len);
for (int i = len; i < length; i++) {
int c = 0;
for (int j = i - len; j >= 0; c = j -= len) {
System.out.println(c + " : 原位置 = " + j + "; 原位置值 = " + arr[j] + "; 对比位置(原位置+步长) = " + (j + len) + "; 对比位置(原位置+步长值) = " + arr[j + len]);
System.out.println("原位置与对比位置比对之前为:");
System.out.println(Arrays.toString(arr));
if (arr[j] > arr[j + len]) {
AlgorithmUtils.swap(arr, j, j + len);
System.out.println("原位置与对比位置比对之后,需要交换:");
System.out.println(Arrays.toString(arr));
} else {
System.out.println("原位置不大于对比位置,不需要交换");
}
}
System.out.println();
}
System.out.println("最终: " + Arrays.toString(arr));
}
System.out.println("shell排序结束:--END-- ");
}
}
package untils;
public class AlgorithmUtils {
public static void swap(int[] arr, int a, int b) {
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}
希尔算法作为工具类使用代码如下
import untils.AlgorithmUtils;
public class Shell {
public static int[] shellSort(int[] arr) {
int length = arr.length;
for (int len = length / 2; len > 0; len /= 2) {
for (int i = len; i < length; i++) {
for (int j = i - len; j >= 0; j -= len) {
if (arr[j] > arr[j + len]) {
AlgorithmUtils.swap(arr, j, j + len);
}
}
}
}
return arr;
}
}