python實現插入排序

2021-09-26 02:34:20 字數 1373 閱讀 7575

我們假設第乙個元素作為有序的乙個序列,然後我們拿後面的元素與其有序序列進行對比,如果後者比前者小,那麼我們就把元素插入到有序序列當中,

以[54,26,93,17,77,31,44,55,20]為例子。

作為有序序列,26比54小,那麼插入到序列當中並且稱為另乙個有序序列【26,54】,然後比較93與有序序列當中的54比較,【26,54,93】 17與93比較 ,17與93互換【26,54,17,93】再讓17與54比較【26,17,54,93】再讓17與26比較【17,26,54,93】以此類推。

因此我們可以得到每次i 要與i-1進行比較,如果i下標元素小就互換,然後再與前面的元素再比 就需要將i=i-1操作。

def insert_sort(alist):

"""插入排序"""

n=len(alist)

#從右邊的無序序列中取出多少個元素執行這樣的過程

for j in range(1,n):

i=j#代表內層迴圈起始值

#執行從右邊的無序序列取出第乙個元素,即i位置的元素,然後將其插入到前面正確的位置中去

while i>0:

if alist[i]0:

if alist[i]0:

if alist[i](1)我們還是以[54,26,93,17,77,31,44,55,20]為例子,假設我們已經比較過前三個數,排序以後結果為[26,54,93,17,77,31,44,55,20] ,17的下標為i=3,我們需要將17與93進行比較,所以就是與下標為i-1的元素怒進行比較,如果後者比前者小就互換[26,54,17,93,77,31,44,55,20],此時17的下標為2,也就是i-1,這時我們還是需要比較17與前面元素的大小,[26,17,54,93,77,31,44,55,20],直到i1時結束迴圈,結果為[17,26,54,93,77,31,44,55,20]。

(2) 我們剛剛舉例17,下標為3,也就是前提前0-2的下標元素已經時排序好的序列,我們需要進行從n次才可以全部排序完成。

(3) else:

break

這句話加入的目的時為了優化演算法,針對與本來就已經時排序好的序列我們可以降低時間複雜度。[26,54,93, 17,77,31,44,55,20]

假設我們已經排序好的序列為【26,54】,現在我們需要比較93,此時93比54大,所以無序互換操作,然後進行i-1操作,實際上也就是再次比較54與26之間的大小關係,而實際上這時【26,54】已經屬於排序好的有序序列。因此再次比較就屬於多餘的操作了。所以使用了else:break

最壞複雜度o(n*n)

優化後的複雜度o(n)

插入排序 python實現

以下是插入排序的python函式實現 def insert sort arr for j in range 1,len arr 從list第二個元素開始 key arr j 儲存將要進行插入排序的元素數值 index j 儲存將要進行插入排序的元素的索引 while index 0 and arr ...

python實現插入排序

插入排序 英語 insertion sort 是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。插入排序分析 實現 i 1 1 ...

Python實現插入排序

插入排序 insertion sort 是一種比較簡單直觀的排序演算法。插入排序的步驟 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素作為待插入物件,在已排序序列中從後向前掃瞄 如果該元素小於前乙個元素,則將兩者調換,再與前乙個元素比較 重複第三步,直到前乙個元素不大於待插元素 將新元素...