public class ShellSort {
private ShellSort(){}
//方式一
public static <E extends Comparable<E>> void sort(E[] arr){
int h = arr.length/2;
while(h >= 1){
for (int start = 0; start < h; start++) {
for (int i = start + h; i < arr.length; i += h) {
E t = arr[i];
int j;
for (j = i; j - h >= 0 && t.compareTo(arr[j-h]) < 0 ; j -= h) {
arr[j] = arr[j-h];
}
arr[j] = t;
}
}
h /= 2;
}
}
//方式二
public static <E extends Comparable<E>> void sort1(E[] arr){
int h = arr.length/2;
while(h >= 1){
for (int i = h; i < arr.length; i++) {
E t = arr[i];
int j;
for (j = i; j - h >= 0 && t.compareTo(arr[j-h]) < 0 ; j -= h) {
arr[j] = arr[j-h];
}
arr[j] = t;
}
h /= 2;
}
}
//方式三
public static <E extends Comparable<E>> void sort2(E[] arr){
int h = 1;
while(h < arr.length){
h = h * 3 + 1;
}
System.out.println("---------" + h);
while(h >= 1){
for (int i = h; i < arr.length; i++) {
E t = arr[i];
int j;
for (j = i; j - h >= 0 && t.compareTo(arr[j-h]) < 0 ; j -= h) {
arr[j] = arr[j-h];
}
arr[j] = t;
}
h /= 3;
}
}
public static void main(String[] args) {
Integer[] arr = {123,12,34,56,88,2,41,89,90,11};
ShellSort.sort2(arr);
System.out.println(Arrays.toString(arr));
}
}算法与数据结构——希尔排序
最新推荐文章于 2025-11-27 10:55:11 发布
文章展示了如何使用Java编程实现Shell排序的三种不同方法。Shell排序是一种插入排序的变种,通过设置间隔序列来减少元素的比较次数。文中提供了三个静态方法,每个方法都对给定的可比较数组进行排序。在最后,代码示例中应用了第三种Shell排序方法对一个整数数组进行排序并打印结果。
590

被折叠的 条评论
为什么被折叠?



