Loading

第十七题、希尔排序(难度系数85)

希尔排序
描述
利用希尔排序算法实现线性表的排序。希尔排序是根据给定的增量序列将线性表分隔成某个“增量”的记录组成一个子序例,在子序列中采用直接插入排序完成。
输入
第一行为元素个数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();
        }
    }
}
posted @ 2023-02-19 20:02  qing影  阅读(25)  评论(0)    收藏  举报  来源