zoukankan      html  css  js  c++  java
  • Java实现希尔排序(增量递减排序)

     1 package Insert.sort;
     2 
     3 import java.util.Scanner;
     4 
     5 /*又叫缩小增量排序,本质是插入排序,将待排的序列增量分成几个子序列,分别对每个子序列进行直接插入排序
     6  * 增量为5时,取1、6、11、16...为一组,2、7、12、17...为一组等,分别对这些组进行直接插入排序,就是一趟希尔排序
     7  * 再以增量为3分割,构成组,分别对这些组进行直接插入排序,就是第二趟希尔排序
     8  * 增量为1分割,就是将整个序列进行一趟直接插入排序...第三趟
     9  * 希尔排序的思想:直接插入排序适合基本有序的情况,希尔的每趟排序都会使整个序列变得更加有序,等整个序列基本有序了,
    10  * 再来一趟直接插入排序,这样会使排序效率更高
    11  * 希尔排序是不稳定排序
    12  * 时间复杂度O(nlog2(n))  ..2是低
    13  * 空间复杂度O(1)
    14  * 注:增量序列最后一个值为1,增量序列中的值没有除1之外的公因子*/
    15 public class shell {
    16 
    17     public static void main(String args[]){
    18         Scanner cin = new Scanner(System.in);
    19         String str = cin.nextLine();
    20         String[] st = str.split(" ");
    21         int[] c = new int[st.length] ;
    22         for(int i=0;i<st.length;i++){
    23             c[i]=Integer.parseInt(st[i]);
    24         }
    25         shellSort(c);
    26         for(int i=0;i<c.length;i++){
    27             System.out.print(c[i]);
    28             System.out.print(" ");
    29         }
    30         cin.close();
    31     }
    32     public static void shellSort(int R[]){
    33         int k = R.length/2;//分组的增量
    34         int temp =0 ;
    35         int x = 0;
    36         while(k>=1){
    37             for(int i=0;i<k;i++){//每组的起始位置
    38                 for(int j=i+k;j<R.length;j+=k){//前后记录位置的增量是k,而不是1
    39                     x=j-k;
    40                     temp=R[j];
    41                     while(x>=i&&temp<R[x]){
    42                         R[x+k]=R[x];//移动的增量是k不是1
    43                         x-=k;
    44                     }
    45                     R[x+k]=temp;
    46                 }
    47             }
    48             k=k/2;
    49         }
    50     }
    51 }
  • 相关阅读:
    flask之闪现
    对于Flask中蓝图的理解
    flask中的CBV和FBV
    Flask之基本使用与配置
    Flask
    Flask-信号(blinker)
    flask-migrate
    Flask WTForms的使用和源码分析 —— (7)
    mac下卸载jdk
    RabbitMQ五种消息队列学习(三)–Work模式
  • 原文地址:https://www.cnblogs.com/Janejxt/p/5813817.html
Copyright © 2011-2022 走看看