数组排序——希尔排序
1、数组排序之希尔排序
先取一个小于n(数组长度n )的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中,先在各组内进行直接插入排序;
然后,取第二个增量d2<d1,重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即:所有记录放在同一组中进行直接插入排序为止。
2、代码演示
package cn.itcast_01;
public class ArraySort_ShellSort {
public static void main(String[] args) {
// 定义一个数组
int[] arr = { 24, 69, 80, 59, 13, 80, 57, 22225, 0, -26 };
// int[] arr = { 24 };
// int[] arr = {};
System.out.println("排序前:");
printArray(arr);
// 调用希尔排序算法
shellSort(arr);
System.out.println("排序后:");
printArray(arr);
}
// 希尔排序
public static void shellSort(int[] arr) {
int i = 0;
int j = 0;
int temp = 0;
for (int d = (arr.length) / 2; d >= 1; d = d / 2) {
for (i = d; i < (arr.length); i++) {
temp = arr[i];
for (j = i - d; j >= 0 && temp < arr[j]; j = j - d)
arr[j + d] = arr[j];
arr[j + d] = temp;
}
}
}
// 数组遍历
public static void printArray(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + ", ");
}
}
System.out.println("]");
}
}