挑战程序设计竞赛(算法和数据结构)——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类的使用
挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现