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

小乖乖的臭坏坏 小乖乖的臭坏坏     2022-12-11     319

关键词:

题目&思路:


代码:

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

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

在《挑战程序设计竞赛(算法和数据结构)——7.2分割(上)JAVA实现》中实现了将任一数组的元素以最后一个元素为界,小的排在前,大的排在后的功能,参照以下链接:https://blog.csdn.net/weixin_42887... 查看详情

挑战程序设计竞赛(算法和数据结构)——4.5java中对应c++stl的数据结构类

查看详情

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

 POJ1981:CircleandPoints/*题目大意:给出平面上一些点,问一个半径为1的圆最多可以覆盖几个点题解:我们对于每个点画半径为1的圆,那么在两圆交弧上的点所画的圆,一定可以覆盖这两个点我们对于每个点计算出其和其它点... 查看详情

挑战程序设计竞赛(算法和数据结构)——7.7最小成本排序的java实现(代码片段)

题目&思路:代码:importjava.util.*;publicclassMinimumCostSortpublicstaticfinalintMAX=1000;publicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);intn=cin.nextInt();in 查看详情

挑战程序设计竞赛(算法和数据结构)——17.4最大正方形的java实现(代码片段)

题目&思路:代码:importjava.util.Scanner;publicclassLargestSquarepublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);intH=cin.nextInt();intW=cin.nextInt();intmap[] 查看详情

挑战程序设计竞赛(算法和数据结构)——5.5迭代器和二分查找的java实现(代码片段)

迭代器代码:importjava.util.Arrays;importjava.util.Iterator;publicclassIteratorDemopublicstaticvoidmain(String[]args)int[]arr=newint[]1,2,3,4,5,6,7,8,9,8,2,6,5,7,1,3,4,5,6;Iterator<Integer 查看详情

挑战程序设计竞赛(算法和数据结构)——5.4散列法习题java代码实现(代码片段)

题目:散列法相关的代码可以参考之前一篇博文https://blog.csdn.net/weixin_42887138/article/details/121254659importjava.lang.ref.PhantomReference;importjava.util.Scanner;publicclass_5_4publicstaticvoidmain(String[]arg 查看详情

挑战程序设计竞赛(算法和数据结构)——4.6数据结构的应用——计算面积java代码实现(代码片段)

题目:代码及实现思路如下:importjava.io.BufferedInputStream;importjava.util.Scanner;importjava.util.Stack;importjava.util.Vector;publicclass_4_6publicstaticvoidmain(String[]args)/*设计两个栈,S1和S 查看详情

挑战程序设计竞赛(算法和数据结构)——4.3队列习题的java实现(代码片段)

题目:基本思路:将任务定义为一个包含名称和时间的Task类,定义一个Task类型的队列,并循环下列算法:用时间sum_time来记录处理情况,只要队列不为空,就不断执行当处理一个队头任务时,首先... 查看详情

挑战程序设计竞赛(算法和数据结构)——10.5java中对应c++stl中的priorityqueue类的使用(代码片段)

importjava.util.Comparator;importjava.util.Queue;importjava.util.PriorityQueue;publicclassPriorityQueueDemopublicstaticvoidmain(String[]args)//默认是从小到大排序,这边需要对排序的方法进行重载,按照从大到小来排Queue<Integer>PQ=newPriorityQueue<I... 查看详情

挑战程序设计竞赛(算法和数据结构)——4.4链表习题的java实现(代码片段)

链表有初始化、插入元素、删除元素、查找元素等方法。在创建链表的过程中,最关键的是搞清楚链表的几个关键数据构成:链表由一个个节点互相串联构成,节点作为一个基础的对象,可由类Node(随便取个... 查看详情

挑战程序设计竞赛(算法和数据结构)——16.13线段相交问题(曼哈顿算法)的java实现(代码片段)

题目与思路:代码:importjava.util.*;publicclassManhattanGeometrypublicstaticclassEpElementprivateGraghBasic.PointP;privateStringdirection;//left,right,bottom,topprivateintid;EpElement()EpElement(GraghBasic.PointP,Stringdirection,intid)this.P=P;this.direction=direction;this... 查看详情

挑战程序设计竞赛(算法和数据结构)——16.12凸包(安德鲁算法)的java实现(代码片段)

题目与思路:代码:importjava.util.*;//数据结果套数据结构时,需要一层一层初始化publicclassConvexHullpublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);intn=cin.nextInt();Vector<GraghBasic.Point>S=newVector<GraghBasic.Poi... 查看详情

挑战程序设计竞赛(算法和数据结构)——13.3单源最短路径(dijkstra算法)的java实现(代码片段)

题目:代码:importjava.io.BufferedInputStream;importjava.io.BufferedReader;importjava.util.Scanner;publicclassSingleSourceShortestPathpublicstaticvoidmain(String[]args)Scannercin=newScanner(newBufferedInputStream(System.in));intn=cin.nextInt();//初始化邻接矩阵MintM[][]... 查看详情

挑战程序设计竞赛(算法和数据结构)——12.2图的表示java实现(代码片段)

题目:importjava.util.Scanner;publicclassGraphImplementpublicstaticvoidmain(String[]args)Scannercin=newScanner(System.in);intn=cin.nextInt();//建立图的邻接矩阵intM[][]=newint[n][n];for(inti=0;i<n;i++)intid=cin.nextInt();intdegree=cin.nextInt();for(i... 查看详情

挑战程序设计竞赛(算法和数据结构)——7.2分割(上)java实现(代码片段)

题目:思路:示例1:示例2:代码如下:importjava.io.BufferedInputStream;importjava.util.Scanner;publicclassPartitionpublicstaticvoidmain(String[]args)Scannercin=newScanner(newBufferedInputStream(System.in));intn=cin.nextInt();int[]A=newint[n];for(inti=... 查看详情

挑战程序设计竞赛(算法和数据结构)——12.5连通分量的java实现(代码片段)

题目:讲解:注意:定义了一个Vector类型的数组,不仅需要初始化Vector类型的数组,还需初始化每一个Vector类型的容器。否则会出现以下异常:Exceptioninthread“main”java.lang.NullPointerException:Cannotinvoke“java.uti... 查看详情

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

归并排序思路:代码如下:importjava.io.BufferedInputStream;importjava.util.Scanner;publicclassMergeSortpublicstaticvoidmain(String[]args)Scannercin=newScanner(newBufferedInputStream(System.in));intn=cin.nextInt();int[]S=newint[n];for(inti=0;i<n;i++)S[i... 查看详情