詳解排序算法之插入排序、希爾排序

插入排序

直接插入排序的基本思想:每次將一個(gè)待排序的記錄,按其keyword的大小插入到前面已經(jīng)排好的子序列中的適當(dāng)位置,直到所有記錄插入完畢為止。

假設(shè)數(shù)組為A[0...n-1]

1.初始時(shí),A[0]自成1個(gè)有序區(qū),無序區(qū)為A[1....n-1]。令i = 1;

2.將A[i]并入當(dāng)前的有序區(qū)A[0...i-1]中形成A[0...i]的有序區(qū)間

3.i++并反復(fù)第二步直到i == n-1

至此排序完畢

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

插入排序

效率分析:

穩(wěn)定

空間復(fù)雜度O(1)

時(shí)間復(fù)雜度O(n2)

最差情況:反序。須要移動(dòng)n*(n-1)/2個(gè)元素

最好情況:正序,不須要移動(dòng)元素

數(shù)組已是排序或者接近順序。插入排序的效率最好的情況是O(n),最壞的情況執(zhí)行時(shí)間和平均情況執(zhí)行時(shí)間均為O(n2)

通常插入排序呈現(xiàn)出二次排序算法中的最佳性能。

插入算法進(jìn)階---->希爾排序

希爾排序是根據(jù)插入排序來實(shí)現(xiàn)的。

希爾排序根據(jù)插入排序的以下兩點(diǎn)性質(zhì)而提出的改進(jìn)方法:

1.插入排序在對(duì)幾乎已經(jīng)順序排列的數(shù)據(jù)操作時(shí),效率高,即可以達(dá)到線性排序的效率。

2.插入排序一般說來是低效的。因?yàn)椴迦肱判驔]次數(shù)據(jù)只能移動(dòng)一位。

希爾排序算法利用了插入排序的簡單,同時(shí)又避免了插入排序每次交換數(shù)據(jù)只能消除一個(gè)逆序的缺點(diǎn)。所以希爾排序一般不是交換相鄰的元素,而是跳躍一段距離進(jìn)行交換。

算法思想:

希爾排序通過將整個(gè)待排序元素序列分成若干個(gè)子序列(由相隔某個(gè)“增量”的元素組成)分別直接進(jìn)行插入排序。然后依次縮減增量再次進(jìn)行排序,待整個(gè)序列中的元素基本有序,即增量足夠小時(shí),再對(duì)全體進(jìn)行元素進(jìn)行一次直接插入排序。因?yàn)樽詈笠淮尾迦肱判蚴腔谟行蛐蛄械牟迦肱判?,效率是很高的。因此希爾排序在時(shí)間上是優(yōu)于直接插入排序的。

步長序列:

步長序列是希爾排序的核心部分。只要最終步長為1,任何步長序列都可以工作。算法最開始以一定的步長進(jìn)行排序。初次排序完畢之后,再次根據(jù)既定步長進(jìn)行排序。最終算法是以步長為1進(jìn)行排序。當(dāng)步長為1的時(shí)候,算法演變?yōu)椴迦肱判颉?/p>

時(shí)間、效率

最優(yōu)時(shí)間為O(n),不穩(wěn)定

java代碼:

java

iOS代碼:

iOS
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,357評(píng)論 0 2
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,306評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,829評(píng)論 0 15
  • 數(shù)據(jù)結(jié)構(gòu)與算法--排序之冒泡、選擇、插入、希爾 我們關(guān)注的主要對(duì)象是重新排列數(shù)組元素的算法,每個(gè)元素都有一個(gè)主鍵,...
    sunhaiyu閱讀 1,229評(píng)論 2 12
  • 01 前兩天搬辦公室,不知道把自己的耳機(jī)丟在哪里了? 我到處找,找不到,就感覺很不開心,心里煩躁和糾結(jié)。其實(shí),我有...
    君子安雅閱讀 583評(píng)論 2 0

友情鏈接更多精彩內(nèi)容