吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談希爾排序算法思想以及如何實(shí)現(xiàn)

Android編程精選 ? 來源:編程學(xué)習(xí)總站 ? 作者:寫代碼的牛頓 ? 2021-06-30 10:05 ? 次閱讀

01

希爾排序算法思想

希爾排序也是一種插入排序,是簡單插入排序改進(jìn)后的一個(gè)更高效版本,同時(shí)也是首批突破O(n^2)算法之一。

希爾排序算法思想:希爾排序是按照下標(biāo)增量進(jìn)行分組,對每組使用插入排序算法進(jìn)行排序,隨著增量減少,每組包含的關(guān)鍵字越來越多,增量減到1時(shí),整個(gè)序列被分為一組,算法終止。

我們以增序排序?yàn)槔柵判蚧静襟E:選擇初始增量gap = length / 2,縮小增量繼續(xù)以gap = gap / 2的方式進(jìn)行,直到增量gap = 1為止,增量的每次變化都會將原始序列劃分為若干組,分別對每一組進(jìn)行插入排序。

每一次通過增量劃分組進(jìn)行插入排序宏觀上小的數(shù)移到了前面,大的數(shù)移到了后面,最后增量gap = 1進(jìn)行插入排序后就是最終的有序序列。本文會以圖解的方式詳細(xì)介紹希爾排序算法的整個(gè)工作過程。

02

希爾排序算法實(shí)現(xiàn)

希爾排序完整源碼如下:

//插入排序 void insert_sort(int *arr, int length, int start, int gap){ if(arr == NULL || length 《= 0 || start 《 0 || gap 《= 0){ return; } int i = 0, j = 0; int value = 0; for(i = start; i 《 length - gap; i += gap){ value = arr[i + gap]; for(j = i; j 》= start; j -= gap){ if(value 《 arr[j]){ arr[j + gap] = arr[j]; }else{ break; } } arr[j + gap] = value; } } //希爾排序 void shell_sort(int *arr, int length){ if(arr == NULL || length 《= 0){ return; } int gap = 0, start = 0; int count = 0; for(gap = length / 2; gap 》 0; gap /= 2){ start = 0; for(count = 0; count 《 length / gap; count++){ insert_sort(arr, length, start, gap); start++; } } }

現(xiàn)在寫一個(gè)小程序驗(yàn)證算法的正確性,代碼如下:

#include 《stdio.h》 #include “shell_sort.h” int main() { int i = 0; printf(“希爾排序結(jié)果 ”); int arr[7] = {8, 23, 64, 12, 0, 5, 6}; shell_sort(arr, 7); for(i = 0; i 《 7; i++){ printf(“%d ”, arr[i]); } printf(“ ”); return 0; }

編譯運(yùn)行輸出如下:

希爾排序結(jié)果 0 5 6 8 12 23 64

算法完全正確!

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    652

    瀏覽量

    29454
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    661

    瀏覽量

    33041

原文標(biāo)題:數(shù)據(jù)結(jié)構(gòu)與算法篇-希爾排序

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    詳解Linux sort命令之掌握排序技巧與實(shí)用案例

    在linux系統(tǒng)使用過程中,提供了sort排序命令,支持常用的排序功能。 常用參數(shù) sort命令支持很多參數(shù),常用參數(shù)如下: ? 短參數(shù) 長參數(shù) 說明 -n – number-sort 按字符串?dāng)?shù)值
    的頭像 發(fā)表于 01-09 10:10 ?221次閱讀

    TimSort:一個(gè)在標(biāo)準(zhǔn)函數(shù)庫中廣泛使用的排序算法

    成為其默認(rèn)排序算法。它的影響不止于此,Java、Android、GNU Octave、Chrome 的 V8 引擎、Swift 以及
    的頭像 發(fā)表于 01-03 11:42 ?126次閱讀

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+內(nèi)容簡介

    內(nèi)容簡介這是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通算法研發(fā)到數(shù)字IC設(shè)計(jì)的實(shí)現(xiàn)屏障,以及指導(dǎo)芯片設(shè)計(jì)工程師從底層掌握復(fù)雜電路設(shè)計(jì)與優(yōu)化方法為目標(biāo)的專業(yè)技術(shù)書。任何芯片(如WiFi芯片
    發(fā)表于 11-21 17:14

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+第九章sigma delta adc閱讀與分享

    思想幾行代碼實(shí)現(xiàn)降幀率算法。 https://mp.weixin.qq.com/s/9Vhe1rUCI8ZGBGGy3todcwPDM系列文章之二:一文搞懂PDM編碼基本原理1bit
    發(fā)表于 11-20 13:58

    【「從算法到電路—數(shù)字芯片算法的電路實(shí)現(xiàn)」閱讀體驗(yàn)】+一本介紹基礎(chǔ)硬件算法模塊實(shí)現(xiàn)的好書

    ,少了再給多點(diǎn)”,本文微信公眾號”嵌入式Lee”中分享了一些列sigma delta思想相關(guān)的文章,比較使用sigma delta思想,幾行代碼就可以實(shí)現(xiàn)降幀率算法,感興趣可以關(guān)注公眾
    發(fā)表于 11-20 13:42

    時(shí)間復(fù)雜度為 O(n^2) 的排序算法

    作者:京東保險(xiǎn) 王奕龍 對于小規(guī)模數(shù)據(jù),我們可以選用時(shí)間復(fù)雜度為 O(n2) 的排序算法。因?yàn)闀r(shí)間復(fù)雜度并不代表實(shí)際代碼的執(zhí)行時(shí)間,它省去了低階、系數(shù)和常數(shù),僅代表的增長趨勢,所以在小規(guī)模數(shù)據(jù)情況下
    的頭像 發(fā)表于 10-19 16:31 ?1251次閱讀
    時(shí)間復(fù)雜度為 O(n^2) 的<b class='flag-5'>排序</b><b class='flag-5'>算法</b>

    名單公布!【書籍評測活動NO.46】從算法到電路 | 數(shù)字芯片算法的電路實(shí)現(xiàn)

    :elecfans123)領(lǐng)取書籍進(jìn)行評測,如在5個(gè)工作日內(nèi)未聯(lián)系,視為放棄本次試用評測資格! 《從算法到電路——數(shù)字芯片算法的電路實(shí)現(xiàn)》 是一本深入解讀基礎(chǔ)算法及其電路設(shè)計(jì),以打通
    發(fā)表于 10-09 13:43

    C加密算法實(shí)現(xiàn)

    電子發(fā)燒友網(wǎng)站提供《C加密算法實(shí)現(xiàn).pdf》資料免費(fèi)下載
    發(fā)表于 09-20 11:10 ?1次下載
    C加密<b class='flag-5'>算法</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    手把手教你排序算法怎么寫

    今天以直接插入排序算法,給大家分享一下排序算法實(shí)現(xiàn)思路,主要包含以下部分內(nèi)容:插入排序介紹插入
    的頭像 發(fā)表于 06-04 08:03 ?774次閱讀
    手把手教你<b class='flag-5'>排序</b><b class='flag-5'>算法</b>怎么寫

    信號分析的基本思想是什么

    信號分析是一種研究信號特性、提取有用信息的方法。它在通信、電子、控制、生物醫(yī)學(xué)等領(lǐng)域具有廣泛的應(yīng)用。本文將詳細(xì)介紹信號分析的基本思想、方法和應(yīng)用。 一、信號分析的基本思想 信號分析的基本思想是通過
    的頭像 發(fā)表于 06-03 10:28 ?909次閱讀

    FPGA能實(shí)現(xiàn)什么樣的算法

    FPGA功能如此強(qiáng)大,請問用FPGA能實(shí)現(xiàn)或者比較適合實(shí)現(xiàn)什么樣的算法
    發(fā)表于 05-26 20:18

    用FPGA實(shí)現(xiàn)雙調(diào)排序的方法(2)

    典型的排序算法包括冒泡排序、選擇排序、插入排序、歸并排序、快速
    的頭像 發(fā)表于 03-21 10:28 ?680次閱讀
    用FPGA<b class='flag-5'>實(shí)現(xiàn)</b>雙調(diào)<b class='flag-5'>排序</b>的方法(2)

    FPGA實(shí)現(xiàn)雙調(diào)排序算法的探索與實(shí)踐

    雙調(diào)排序(BitonicSort)是數(shù)據(jù)獨(dú)立(Data-independent)的排序算法,即比較順序與數(shù)據(jù)無關(guān),特別適合并行執(zhí)行。在了解雙調(diào)排序
    發(fā)表于 03-14 09:50 ?710次閱讀
    FPGA<b class='flag-5'>實(shí)現(xiàn)</b>雙調(diào)<b class='flag-5'>排序</b><b class='flag-5'>算法</b>的探索與實(shí)踐

    想聽聽48和大對數(shù)光纜的排序

    48芯光纜和大對數(shù)光纜都是光纜中的一種,它們的區(qū)別在于芯數(shù)不同。48芯光纜指的是光纜中包含48根光纖,而大對數(shù)光纜則是指光纜中芯數(shù)超過了48芯。 在實(shí)際的光纜應(yīng)用中,不同芯數(shù)的光纜需要進(jìn)行不同的排序
    的頭像 發(fā)表于 03-12 10:44 ?705次閱讀

    C語言實(shí)現(xiàn)經(jīng)典排序算法概覽

    冒泡排序(英語:Bubble Sort)是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序(如從大到小、首字母從A到Z)錯(cuò)誤就把他們交換過來。
    的頭像 發(fā)表于 02-25 12:27 ?485次閱讀
    C語言<b class='flag-5'>實(shí)現(xiàn)</b>經(jīng)典<b class='flag-5'>排序</b><b class='flag-5'>算法</b>概覽
    百家乐微心打法| 杨氏百家乐官网必胜公式| 威尼斯人娱乐场官网48008| 百家乐官网投注网出租| 百家乐官网能战胜吗| 娱乐网百家乐的玩法技巧和规则| 皇冠百家乐官网的玩法技巧和规则 | 大发888 娱乐场| 百家乐路单| 乐中百家乐官网的玩法技巧和规则| 呼和浩特市| 威尼斯人娱乐城赌博网站| A8百家乐现金网| 有百家乐官网的棋牌游戏| 澳门百家乐必胜| 免费百家乐缩水软件| 百家乐软件编辑原理| 百家乐官网必胜赌| 百家乐官网评级导航| 大发888手机版亚洲城| 百家乐赌场娱乐| 网上百家乐官网游戏玩法 | 澳门百家乐官网娱乐城信誉如何| 棋牌网| 百家乐永利娱乐场开户注册| 大中华百家乐官网的玩法技巧和规则 | 百家乐官网技巧之微笑心法| 淘宝皇冠网店| 大发888怎样存款| 百家乐怎么骗人| 同花顺百家乐官网娱乐城| 宁化县| 澳门金沙官网| 大发888在线娱乐城合作伙伴| 网上百家乐官网打牌| 大世界百家乐官网现金网| 宁都县| 美高梅娱乐| 大发888大发888官网| 威尼斯人娱乐城官方网址| 百家乐官网筹码价格|