插入排序的工作原理如下:
(1)從陣列第乙個元素開始
(0下標
),從該元素開始進行構建有序序列;
(2)取出待排序列中第乙個元素,然後從「有序」序列中,從後往前掃瞄;
(3)如果該元素
(有序序列
)大於待插入元素
(待排序列
),將該元素後移乙個位置;
(4)重複步驟
3,直到找到「有序序列」中某一元素小於或等於「待插入元素」的位置;
(5)將待插入元素插入到該元素
(有序序列)後面
(i+1)
的位置上
;(6)重複步驟
2~5,直到待排序列中沒有元素。
例子實現步驟圖:
最優時間複雜度:o(n)
最壞時間複雜度:o(n²
)穩定性:穩定
優點:穩定,比較快
缺點:比較次數不確定,資料量越大,該演算法越差
#!/usr/bin/env python
#-*- coding:utf-8 -*-
__author__ = "
hsz"
definsert_sort(alist):
"""插入排序
index:有序序列尾元素下標
value:有序序列尾元素值
:param alist: 待排序列
:return:
"""n =len(alist)
for i in range(1, n):
index = i - 1value =alist[i]
while index >= 0 and alist[index] >value:
#將待插入元素依次與有序序列比較(從右至左),
#直到找到有序序列中某一元素小於待插入元素或者沒有找到比待插入元素小的值;
alist[index + 1] =alist[index]
index -= 1
#將待插入的元素,插入到有序系列中:
#若找到有序序列中某乙個元素小於待插入元素,則將待插入元素插入到該元素後面;
#若在有序序列中沒有找到大於待插入元素的值,則將待插入元素位置不變;
alist[index + 1] =value
if__name__ == "
__main__":
li = [53, 27, 36, 15, 69,42]
print("
排序前的列表
", li)
insert_sort(li)
print("
排序後的列表
", li)
排序演算法之插入排序
排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...
排序演算法之插入排序
排序演算法之插入排序 1 插入排序的思想 假設在乙個有序序列中 e 0 e i 1 這i 個元素已經排好序,則當要將第 i 1個元素 e 插入該序列時,只需將第 i 1個元素與從 e 0 開始到e i 1 元素進行比較,當發現第 j個元素 e j 在序列中應在 e 前,且 e j 1 應在e 後時,...
排序演算法之插入排序
本節主要分析插入排序演算法的直接插入排序和希爾 shell 排序 又稱縮小增量排序 1.直接插入排序 該排序是最簡單的排序方法,其基本思想是 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至i n為止,依次將r i 插入當前的有序區r 1....