最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java排序算法總結(jié)之希爾排序

 更新時(shí)間:2015年05月19日 10:47:05   作者:一羽清寧  
這篇文章主要介紹了Java排序算法總結(jié)之希爾排序,較為詳細(xì)的分析了希爾排序的原理與java的實(shí)現(xiàn)技巧,需要的朋友可以參考下

本文實(shí)例講述了Java排序算法總結(jié)之希爾排序。分享給大家供大家參考。具體分析如下:

前言:希爾排序(Shell Sort)是插入排序的一種。是針對直接插入排序算法的改進(jìn)。該方法又稱縮小增量排序,因DL.Shell于1959年提出而得名。本文主要介紹希爾排序用Java是怎樣實(shí)現(xiàn)的。

希爾排序(縮小增量法) 屬于插入類排序,是將整個(gè)無序列分割成若干小的子序列分別進(jìn)行插入排序。希爾排序并不穩(wěn)定,O(1)的額外空間,時(shí)間復(fù)雜度為O(N*(logN)^2)。最壞的情況下的執(zhí)行效率和在平均情況下的執(zhí)行效率相比相差不多。

基本思想:

先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分成d1個(gè)組。所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中。先在各組內(nèi)進(jìn)行直接插入排序;然后,取第二個(gè)增量d2<d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂?/p>

代碼實(shí)現(xiàn):

public class Test { 
  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 };
  // 預(yù)設(shè)數(shù)據(jù)數(shù)組 
  public static void main(String args[]) { 
    int i; // 循環(huán)計(jì)數(shù)變量 
    int Index = a.length;// 數(shù)據(jù)索引變量 
    System.out.print("排序前: "); 
    for (i = 0; i < Index - 1; i++) 
      System.out.printf("%3s ", a); 
    System.out.println(""); 
    ShellSort(Index - 1); // 選擇排序 
    // 排序后結(jié)果 
    System.out.print("排序后: "); 
    for (i = 0; i < Index - 1; i++) 
      System.out.printf("%3s ", a); 
    System.out.println(""); 
  } 
  public static void ShellSort(int Index) { 
    int i, j, k; // 循環(huán)計(jì)數(shù)變量 
    int Temp; // 暫存變量 
    boolean Change; // 數(shù)據(jù)是否改變 
    int DataLength; // 分割集合的間隔長度 
    int Pointer; // 進(jìn)行處理的位置 
    DataLength = (int) Index / 2; // 初始集合間隔長度 
    while (DataLength != 0) // 數(shù)列仍可進(jìn)行分割 
    { 
      // 對各個(gè)集合進(jìn)行處理 
      for (j = DataLength; j < Index; j++) { 
        Change = false; 
        Temp = a[j]; // 暫存Data[j]的值,待交換值時(shí)用 
        Pointer = j - DataLength; // 計(jì)算進(jìn)行處理的位置 
        // 進(jìn)行集合內(nèi)數(shù)值的比較與交換值 
        while(Temp < a[Pointer] && Pointer >= 0 && Pointer <= Index){ 
          a[Pointer + DataLength] = a[Pointer]; 
          // 計(jì)算下一個(gè)欲進(jìn)行處理的位置
          Pointer = Pointer - DataLength; 
          Change = true; 
          if (Pointer < 0 || Pointer > Index) 
            break; 
        } 
        // 與最后的數(shù)值交換
        a[Pointer + DataLength] = Temp; 
        if (Change) { 
          // 打印目前排序結(jié)果 
          System.out.print("排序中: "); 
          for (k = 0; k < Index; k++) 
            System.out.printf("%3s ", a[k]); 
          System.out.println(""); 
        } 
      } 
      DataLength = DataLength / 2; // 計(jì)算下次分割的間隔長度
    } 
  } 
}

希爾排序幾乎沒有最壞情況,無論是正序、逆序、亂序,所用時(shí)間都不是很多,附加儲(chǔ)存是O(1),的確非常不錯(cuò)。在沒搞清楚快速排序、堆排序之前,它的確是個(gè)很好的選擇。希望能給你帶來幫助。

希望本文所述對大家的java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java正則表達(dá)式,提取雙引號中間的部分方法

    Java正則表達(dá)式,提取雙引號中間的部分方法

    今天小編就為大家分享一篇Java正則表達(dá)式,提取雙引號中間的部分方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解Servlet之過濾器(Filter)

    詳解Servlet之過濾器(Filter)

    本篇文章主要介紹了Servlet——過濾器(Filter),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • java中l(wèi)ist使用時(shí)需避免的場景總結(jié)

    java中l(wèi)ist使用時(shí)需避免的場景總結(jié)

    眾所周知,Java為開發(fā)者提供了多種集合類的實(shí)現(xiàn),其中幾乎所有業(yè)務(wù)代碼都需要用到List,但List的錯(cuò)誤使用也會(huì)導(dǎo)致諸多問題,所以本文我們就來看一看幾個(gè)錯(cuò)誤使用List的場景吧
    2023-10-10
  • Java?Mybatis的初始化之Mapper.xml映射文件的詳解

    Java?Mybatis的初始化之Mapper.xml映射文件的詳解

    這篇文章主要介紹了Java?Mybatis的初始化之Mapper.xml映射文件的詳解,解析完全局配置文件后接下來就是解析Mapper文件了,它是通過XMLMapperBuilder來進(jìn)行解析的
    2022-08-08
  • Spring Cache的使用示例詳解

    Spring Cache的使用示例詳解

    SpringCache是構(gòu)建在SpringContext基礎(chǔ)上的緩存實(shí)現(xiàn),提供了多種緩存注解,如@Cachable、@CacheEvict、@CachePut等,本文通過實(shí)例代碼介紹了Spring Cache的使用,感興趣的朋友一起看看吧
    2025-01-01
  • springboot項(xiàng)目如何設(shè)置時(shí)區(qū)

    springboot項(xiàng)目如何設(shè)置時(shí)區(qū)

    這篇文章主要介紹了springboot項(xiàng)目如何設(shè)置時(shí)區(qū)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • mybatis-plus QueryWrapper and or 連用并且實(shí)現(xiàn)分頁

    mybatis-plus QueryWrapper and or 連用并且實(shí)現(xiàn)分

    這篇文章主要介紹了mybatis-plus QueryWrapper and or 連用并且實(shí)現(xiàn)分頁,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    使用Java實(shí)現(xiàn)在Excel中創(chuàng)建下拉列表

    下拉列表(下拉框)可以確保用戶僅從預(yù)先給定的選項(xiàng)中進(jìn)行選擇,這樣不僅能減少數(shù)據(jù)輸入錯(cuò)誤,還能節(jié)省時(shí)間提高效率,下面我們就來看看如何在java中利用免費(fèi)庫實(shí)現(xiàn)創(chuàng)建下拉列表吧
    2024-03-03
  • Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決

    Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決

    本文主要介紹了Mybatis-Plus @TableField自動(dòng)填充時(shí)間為null的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 深度源碼解析Java 線程池的實(shí)現(xiàn)原理

    深度源碼解析Java 線程池的實(shí)現(xiàn)原理

    如何高效的使用這些資源就是程序員在平時(shí)寫代碼時(shí)候的一個(gè)努力的方向。本文要說的線程池就是一種對 CPU 利用的優(yōu)化手段。對Java 線程池的實(shí)現(xiàn)原理相關(guān)知識感興趣的朋友一起看看吧
    2021-05-05

最新評論

惠水县| 永州市| 田林县| 布拖县| 林州市| 鲁山县| 和田县| 鄢陵县| 甘德县| 龙泉市| 筠连县| 成安县| 南开区| 巨鹿县| 龙岩市| 中山市| 林芝县| 大名县| 科尔| 柳林县| 崇仁县| 炉霍县| 定边县| 龙井市| 荔浦县| 醴陵市| 宁乡县| 龙江县| 抚顺县| 九江县| 岳阳市| 永和县| 福泉市| 苍南县| 盐城市| 普兰店市| 桐乡市| 阿瓦提县| 平泉县| 曲水县| 太白县|