日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序:插入排序与希尔排序

發布時間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序:插入排序与希尔排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

插入排序

插入排序(英語:Insertion Sort)是一種簡單直觀的排序算法。它的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。插入排序在實現上,在從后向前掃描過程中,需要反復把已排序元素逐步向后挪位,為最新元素提供插入空間。

插入排序分析



def insert_sort(alist):# 從第二個位置,即下標為1的元素開始向前插入for i in range(1, len(alist)):# 從第i個元素開始向前比較,如果小于前一個元素,交換位置for j in range(i, 0, -1):if alist[j] < alist[j-1]:alist[j], alist[j-1] = alist[j-1], alist[j]alist = [54,26,93,17,77,31,44,55,20] insert_sort(alist) print(alist)

時間復雜度

  • 最優時間復雜度:O(n)
  • 最壞時間復雜度:O(n2)
  • 穩定性:穩定


希爾排序

希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。該方法因DL.Shell于1959年提出而得名。 希爾排序是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。

希爾排序過程

希爾排序的基本思想是:將數組列在一個表中并對列分別進行插入排序,重復這過程,不過每次用更長的列(步長更長了,列數更少了)來進行。最后整個表就只有一列了。將數組轉換至表是為了更好地理解這算法,算法本身還是使用數組進行排序。

例如,假設有這樣一組數[ 13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10 ],如果我們以步長為5開始進行排序,我們可以通過將這列表放在有5列的表中來更好地描述算法,這樣他們就應該看起來是這樣(豎著的元素是步長組成):

13 14 94 33 82 25 59 94 65 23 45 27 73 25 39 10

然后我們對每列進行排序:

10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45

將上述四行數字,依序接在一起時我們得到:[ 10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45 ]。這時10已經移至正確位置了,然后再以3為步長進行排序:

10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45

排序之后變為:

10 14 13 25 23 33 27 25 59 39 65 73 45 94 82 94

最后以1步長進行排序(此時就是簡單的插入排序了)

希爾排序的分析

def shell_sort(alist):n = len(alist)# 初始步長gap = n / 2while gap > 0:# 按步長進行插入排序for i in range(gap, n):j = i# 插入排序while j>=gap and alist[j-gap] > alist[j]:alist[j-gap], alist[j] = alist[j], alist[j-gap]j -= gap# 得到新的步長gap = gap / 2alist = [54,26,93,17,77,31,44,55,20] shell_sort(alist) print(alist)

時間復雜度

  • 最優時間復雜度:根據步長序列的不同而不同
  • 最壞時間復雜度:O(n2)
  • 穩定性:不穩定

總結

以上是生活随笔為你收集整理的排序:插入排序与希尔排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。