希尔排序
描述
利用希尔排序算法实现线性表的排序。希尔排序是根据给定的增量序列将线性表分隔成某个“增量”的记录组成一个子序例,在子序列中采用直接插入排序完成。
输入
第一行为元素个数n(1<=n<=1000),第二行为n个元素值(整数),即需要排序的元素个数,第三行增量序列中增量个数m,第四行为m个增量,可以假定最后一个增量为1。
输出
对每一测试用例,用m行输出各增量进行希尔排序结果,用空格隔开。
样例输入
10
49 38 65 97 76 13 27 49 55 4
3
5 3 1
样例输出
13 27 49 55 4 49 38 65 97 76
13 4 49 38 27 49 55 65 97 76
4 13 27 38 49 49 55 65 76 97
参考:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
int m = sc.nextInt();
int[] ad = new int[m];
for (int i = 0; i < m; i++) {
ad[i] = sc.nextInt();
}
// 哈希排序
for (int i = 0; i < m; i++) {
// 对增量进行希尔排序
for (int j = ad[i]; j < n; j++) {
int temp = arr[j];
int k = j - ad[i];
while (k >= 0 && arr[k] > temp) {
arr[k + ad[i]] = arr[k];
k -= ad[i];
}
arr[k + ad[i]] = temp;
}
// 输出每次哈希排序结果
for (int j = 0; j < n; j++) {
System.out.print(arr[j] + " ");
}
System.out.println();
}
}
}