DS排序--希尔排序
题目描述
给出一个数据序列,使用希尔排序算法进行降序排序。
间隔gap使用序列长度循环除2直到1
输入
第一行输入t,表示有t个测试示例
第二行输入n,表示第一个示例有n个数据(n>1)
第三行输入n个数据,都是正整数,数据之间用空格隔开
以此类推
输出
对每组测试数据,输出每趟排序结果。不同组测试数据间用空行分隔。
样例输入
2
6
111 22 6 444 333 55
8
77 555 33 1 444 77 666 2222
样例输出
444 333 55 111 22 6
444 333 111 55 22 6
444 555 666 2222 77 77 33 1
666 2222 444 555 77 77 33 1
2222 666 555 444 77 77 33 1
Solution:
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner scanner = new Scanner(System.in);
int t = scanner.nextInt();
for (int i = 0; i < t; i++) {
int n =scanner.nextInt();
int[] a = new int[n];
for (int j = 0; j < n; j++) {
a[j] = scanner.nextInt();
}
// sell sort
shellSort(a, n);
}
}
private static void shellSort(int[] num, int n) {
for(int gap = n/2; gap >=1; gap/=2) {
for(int i = gap; i<n;i++){
int temp = num[i];
int j = i -gap;
// num[j] <temp : this line control the order
for(;j>=0 &&num[j]<temp ;j -= gap) {
num[j+gap] = num[j];
}
num[j+gap] = temp;
}
show(num);
}
System.out.println();
}
private static void show(int[] num) {
for (int i = 0; i < num.length; i++) {
System.out.print(num[i]);
if (i!=num.length-1) {
System.out.print(" ");
}
}
System.out.println();
}
}