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

圖解Java經(jīng)典算法希爾排序的原理與實現(xiàn)

 更新時間:2022年09月09日 13:59:40   作者:Binaire-沐辰  
希爾排序是希爾(Donald Shell)于1959年提出的一種排序算法。希爾排序也是一種插入排序,它是簡單插入排序經(jīng)過改進之后的一個更高效的版本,也稱為縮小增量排序,同時該算法是沖破O(n2)的第一批算法之一。本文會以圖解的方式詳細介紹希爾排序的基本思想及其代碼實現(xiàn)

希爾排序

希爾排序時插入排序的一種,也稱縮小增量排序,是直接插入排序的一種更高效的改進版本。希爾排序是非穩(wěn)定排序算法。

算法思想

希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序,隨著增量逐漸減少,每組包含的數(shù)越來越多當增量減至1時,整個序列恰好被分成一組,算法完成。

我們以增序排序為例,希爾排序基本步驟:選擇初始增量gap=length/2,縮小增量繼續(xù)以gap=gap/2的方式進行,直到增量gap=1為止,增量的每次變化都會將原始序列劃分為若干組,分別對每一組進行插入排序,每一次通過增量劃分組進行插入排序宏觀上小的數(shù)移到了前面,大的數(shù)移到了后面,最后增量gap=1進行插入排序后就是最終的有序序列。下面以圖解的方式詳細介紹希爾排序算法的整個流程。

圖解

代碼實現(xiàn)(Java)

public class ShellSort {
    public static void main(String[] args){
        int[] array = {86,11,54,34,53,12,45,81,19,65};
        int gap = array.length;
        while (true) {
            gap /= 2;   //增量每次減半
            for (int i = 0; i < gap; i++) {
                for (int j = i + gap; j < array.length; j += gap) {//這個循環(huán)里其實就是一個插入排序
                    int k = j - gap;
                    while (k >= 0 && array[k] > array[k+gap]) {
                        int temp = array[k];
                        array[k] = array[k+gap];
                        array[k + gap] = temp;
                        k -= gap;
                    }
                }
            }
            if (gap == 1)
                break;
        }
        System.out.println("排序結果:");
        for(int i=0;i<array.length;i++){
            System.out.print(array[i]+" ");
        }
    }
}
//排序前:{86,11,54,34,53,12,45,81,19,65}
//排序后:{11,12,19,34,45,53,54,65,81,86}

到此這篇關于圖解Java經(jīng)典算法希爾排序的原理與實現(xiàn)的文章就介紹到這了,更多相關Java希爾排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何用java編寫一個rmi

    如何用java編寫一個rmi

    RMI能讓一個Java程序去調(diào)用網(wǎng)絡中另一臺計算機的Java對象的方法,那么調(diào)用的效果就像是在本機上調(diào)用一樣。下面我們來詳細了解一下吧
    2019-06-06
  • 2020年支持java8的Java反編譯工具匯總(推薦)

    2020年支持java8的Java反編譯工具匯總(推薦)

    這篇文章主要介紹了2020年支持java8的Java反編譯工具匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Spring Security基于json登錄實現(xiàn)過程詳解

    Spring Security基于json登錄實現(xiàn)過程詳解

    這篇文章主要介紹了Spring Security基于json登錄實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 關于Java實現(xiàn)HttpServer模擬前端接口調(diào)用

    關于Java實現(xiàn)HttpServer模擬前端接口調(diào)用

    這篇文章主要介紹了關于Java實現(xiàn)Http?Server模擬前端接口調(diào)用,Http?協(xié)議是建立在?TCP?協(xié)議之上的協(xié)議,所以能用?TCP?來自己模擬一個簡單的?Http?Server?當然是可以的,需要的朋友可以參考下
    2023-04-04
  • Java Hutool(糊涂)工具類索引詳解

    Java Hutool(糊涂)工具類索引詳解

    這篇文章主要介紹了Java Hutool(糊涂)工具類索引,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • mybatis中resulthandler的用法

    mybatis中resulthandler的用法

    這篇文章主要介紹了mybatis中resulthandler的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 在SpringBoot中整合數(shù)據(jù)源的示例詳解

    在SpringBoot中整合數(shù)據(jù)源的示例詳解

    這篇文章主要介紹了在SpringBoot中如何整合數(shù)據(jù)源,本文介紹了如何在SpringBoot項目中整合常見的數(shù)據(jù)源,包括JdbcTemplate、MyBatis和JPA,并探討了如何配置和使用多數(shù)據(jù)源,需要的朋友可以參考下
    2023-06-06
  • mybatis-generator如何自定義注釋生成

    mybatis-generator如何自定義注釋生成

    這篇文章主要介紹了mybatis-generator如何自定義注釋生成的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IDEA項目啟動時Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案

    IDEA項目啟動時Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案

    面對IDEA項目啟動時報出的Flyway遷移校驗和不匹配問題,核心在于保持遷移腳本的一致性、正確管理和理解Flyway的工作機制,本文介紹IDEA項目啟動時Flyway數(shù)據(jù)庫遷移中的checksum不匹配問題及最新解決方案,感興趣的朋友一起看看吧
    2024-01-01
  • springboot使用外置tomcat啟動方式

    springboot使用外置tomcat啟動方式

    這篇文章主要介紹了springboot使用外置tomcat啟動方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

沁源县| 玉溪市| 玛曲县| 岱山县| 荃湾区| 庆城县| 贵州省| 宁化县| 镶黄旗| 万宁市| 洞头县| 镇巴县| 呼图壁县| 新竹市| 祁东县| 二连浩特市| 万宁市| 嘉峪关市| 正定县| 辛集市| 石泉县| 白沙| 宜丰县| 隆德县| 新郑市| 普洱| 东乡族自治县| 德阳市| 东乡县| 左权县| 淮滨县| 康乐县| 肥西县| 左权县| 合阳县| 福州市| 惠安县| 屏山县| 环江| 韶山市| 乳源|