欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 插入排序之希爾排序的實(shí)例

 更新時(shí)間:2017年07月08日 14:58:38   投稿:lqh  
這篇文章主要介紹了Java 插入排序之希爾排序的實(shí)例的相關(guān)資料,需要的朋友可以參考下

Java 插入排序之希爾排序的實(shí)例

Java代碼 

/*希爾排序(Shell Sort)是插入排序的一種。其基本思想是:先取定一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分成d1 
   * 個(gè)組,所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中,在各個(gè)組中進(jìn)行插入排序;然后,取第二個(gè)增量d2<d1,重復(fù)上述的分組和排序, 
   * 直至所取的增量dt=1(dt<dt-1<...<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂?
   * new int[]{8,5,1,7,9,4,6},開始分割集合的間隔長度為3的情況,[[6][3][0]比較排序后,[4]和[1]比較排序后,[5]和[2]比較排序后, 
   * 分割集合的間隔長度為1,這時(shí)[1]和[0]比較排序后,[2][1][0]....,和直接插入排序一樣了。*/ 
  public static void shellSort(int[] intArray) { 
     System.out.print("將要排序的數(shù)組為:    "); 
     for(int k=0;k<intArray.length;k++) 
        System.out.print(" "+intArray[k]+" "); 
      System.out.println(); 
     
    int arrayLength=intArray.length; 
    int j,k;//循環(huán)變量 
    int temp;//暫存變量 
    boolean isChange;//數(shù)據(jù)是否改變 
    int dataLength;//分割集合的間隔長度 
    int pointer;//進(jìn)行處理的位置 
    dataLength=arrayLength/2;//初始集合間隔長度 
    while(dataLength!=0){//數(shù)列仍可進(jìn)行分割 
      //對各個(gè)集合進(jìn)行處理 
      for(j=dataLength;j<arrayLength;j++){ 
        isChange=false; 
        temp=intArray[j];//暫存,待交換值時(shí)用 
        pointer=j-dataLength;//計(jì)算進(jìn)行處理的位置 
        //進(jìn)行集合內(nèi)數(shù)值的比較與交換值 
        while(temp<intArray[pointer]&&pointer>=0&&pointer<arrayLength){ 
          intArray[pointer+dataLength]=intArray[pointer]; 
          //計(jì)算下一個(gè)欲進(jìn)行處理的位置 
          pointer=pointer-dataLength; 
          isChange=true; 
          System.out.print("every changing result: "); 
          for(k=0;k<arrayLength;k++) 
            System.out.print(" "+intArray[k]+" "); 
          System.out.println(); 
          if(pointer<0||pointer>arrayLength) 
            break; 
        } 
        //與最后的數(shù)值交換 
        intArray[pointer+dataLength]=temp; 
        if(isChange){ 
          System.out.print("Current sorting result: "); 
          for(k=0;k<arrayLength;k++) 
            System.out.print(" "+intArray[k]+" "); 
          System.out.println(); 
        } 
      } 
      System.out.print("指定分割集合的間隔長度為"+dataLength+",對各個(gè)集合進(jìn)行處理后,Current sorting result: "); 
      for(k=0;k<arrayLength;k++) 
        System.out.print(" "+intArray[k]+" "); 
      System.out.println(); 
      dataLength=dataLength/2;//計(jì)算下次分割的間隔長度 
    } 
  } 

 運(yùn)行后的結(jié)果為:

Java代碼 

將要排序的數(shù)組為:     8 5 1 7 9 4 6  
every changing result: 8 5 1 8 9 4 6  
Current sorting result: 7 5 1 8 9 4 6  
every changing result: 7 5 1 8 9 4 8  
every changing result: 7 5 1 7 9 4 8  
Current sorting result: 6 5 1 7 9 4 8  
指定分割集合的間隔長度為3,對各個(gè)集合進(jìn)行處理后,Current sorting result: 6 5 1 7 9 4 8  
every changing result: 6 6 1 7 9 4 8  
Current sorting result: 5 6 1 7 9 4 8  
every changing result: 5 6 6 7 9 4 8  
every changing result: 5 5 6 7 9 4 8  
Current sorting result: 1 5 6 7 9 4 8  
every changing result: 1 5 6 7 9 9 8  
every changing result: 1 5 6 7 7 9 8  
every changing result: 1 5 6 6 7 9 8  
every changing result: 1 5 5 6 7 9 8  
Current sorting result: 1 4 5 6 7 9 8  
every changing result: 1 4 5 6 7 9 9  
Current sorting result: 1 4 5 6 7 8 9  
指定分割集合的間隔長度為1,對各個(gè)集合進(jìn)行處理后,Current sorting result: 1 4 5 6 7 8 9 

 當(dāng)分割的間隔為1時(shí),變成了直接插入排序。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Java實(shí)現(xiàn)post請求詳細(xì)代碼(帶有參數(shù))

    Java實(shí)現(xiàn)post請求詳細(xì)代碼(帶有參數(shù))

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)帶有參數(shù)post請求的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-08-08
  • mybatis if標(biāo)簽判斷不生效的解決方法

    mybatis if標(biāo)簽判斷不生效的解決方法

    這篇文章主要介紹了mybatis if標(biāo)簽判斷不生效的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • java線程之Happens before規(guī)則案例詳解

    java線程之Happens before規(guī)則案例詳解

    這篇文章主要為大家介紹了java線程之Happens-before規(guī)則,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2022-08-08
  • Junit springboot打印測試方法信息

    Junit springboot打印測試方法信息

    這篇文章主要介紹了Junit springboot打印測試方法信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • MyBatis自動(dòng)生成Where語句

    MyBatis自動(dòng)生成Where語句

    這篇文章主要介紹了MyBatis自動(dòng)生成Where語句的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-08-08
  • springboot開啟mybatis二級緩存的步驟詳解

    springboot開啟mybatis二級緩存的步驟詳解

    這篇文章給大家介紹了springboot開啟mybatis二級緩存的詳細(xì)步驟,文中通過代碼示例給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • java代理模式與動(dòng)態(tài)代理模式詳解

    java代理模式與動(dòng)態(tài)代理模式詳解

    代理就是一個(gè)人或者一個(gè)機(jī)構(gòu)代表另一個(gè)人或者另一個(gè)機(jī)構(gòu)采取行動(dòng)。在一些情況下,一個(gè)客戶不想或者不能夠直接引用一個(gè)對象,而代理對象可以在客戶端和目標(biāo)對象之前起到中介的作用
    2014-02-02
  • Java 基礎(chǔ)詳解(泛型、集合、IO、反射)

    Java 基礎(chǔ)詳解(泛型、集合、IO、反射)

    下面小編就為大家?guī)硪黄狫ava 基礎(chǔ)詳解(泛型、集合、IO、反射)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java強(qiáng)制類型轉(zhuǎn)換的所有規(guī)則及說明

    Java強(qiáng)制類型轉(zhuǎn)換的所有規(guī)則及說明

    這篇文章主要介紹了Java強(qiáng)制類型轉(zhuǎn)換的所有規(guī)則及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信)

    java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信)

    這篇文章主要介紹了java實(shí)現(xiàn)基于UDP協(xié)議網(wǎng)絡(luò)Socket編程(C/S通信),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評論