挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现相关的知识,希望对你有一定的参考价值。

题目&思路:


代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class ShellSort 
    public static long cnt;
    public static int A[] = new int[1000000];
    public static int n;
    public static ArrayList<Integer> G = new ArrayList<>();

    public static void insertionSort(int A[], int n, int g)
        for(int i=g;i<n;i++)
            int v= A[i];
            int j=i-g;
            while (j>=0 && A[j]>v)
                A[j+g] = A[j];
                j -= g;
                cnt++;
            
            A[j+g] = v;
        
    

    public static void shellSort(int A[], int n)
        //生成数列G=1,4,13,40,121,364,1093..
        for (int h=1;;)
            if (h>n)break;
            G.add(h);
            h = 3*h+1;
        

        for (int i=G.size()-1;i>=0;i--)//按逆序指定G[i]=g
            insertionSort(A,n,G.get(i));
        
    

    public static void main(String[] args) 
        Scanner cin = new Scanner(System.in);
        n = cin.nextInt();
        for (int i=0;i<n;i++)
            A[i] = cin.nextInt();
        
        cnt=0;

        shellSort(A, n);

        System.out.println(G.size());

        for (int i=G.size()-1;i>=0;i--)
            System.out.print(G.get(i));
            if(i!=0) System.out.print(" ");
        
        System.out.println();
        System.out.println(cnt);
        for (int i=0;i<n;i++)
            System.out.println(A[i]);
        
        
    


输入:

5
5
1
4
3
2

输出:

2
4 1
3
1
2
3
4
5

以上是关于挑战程序设计竞赛(算法和数据结构)——3.6希尔排序的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章

挑战程序设计竞赛(算法和数据结构)——分割(下)&快速排序的JAVA实现

挑战程序设计竞赛(算法和数据结构)——10.5 Java 中对应C++ STL中的PriorityQueue类的使用

挑战程序设计竞赛 3.6 与平面和空间打交道的计算几何

挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现

挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现

挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现