直接插入排序屬於比較簡單的排序演算法,基本原理:
看上面的定義可能不是特別清楚其原理,那麼請看來自維基百科的動態演示圖:
以圖中列表為例,下面是分析過程:
[
6,5,3,1,8,7,2,4
]
[
5,6,3,1,8,7,2,4
]
[3,
5,6,
1,8,
7,2,4
]
[
1,3,5,6,8
,7,2,4
]
[
1,3,5,6,8
,7,2,4
]
以此類推。直到排序完成
我們可以單獨使用乙個中間變數來儲存待排序的元素,也可以在列表的首部插入乙個變數用來儲存待排序的元素。因為**量以及索引計算方便等原因,這裡使用在列表的首部插入乙個元素乙個變數用來儲存待排序的元素的方式編寫**。
lst =[6
,5,3
,1,8
,7,2
,4]lst =[0
]+ lst # [0, 6, 5, 3, 1, 8, 7, 2, 4]
length =
len(lst)
for i in
range(2
, length):#
lst[0]
= lst[i]
j = i -
1if lst[j]
> lst[0]
:while lst[j]
> lst[0]
: lst[j+1]
= lst[j]
lst[j]
= lst[0]
j -=
1print
(lst[1:
])
附上使用單個變數的方法:
lst =[6
,5,3
,1,8
,7,2
,4]length =
len(lst)
temp =
0for i in
range(1
, length)
:# 7
temp = lst[i]
j = i -
1# 6
if lst[j]
> temp:
while lst[j]
> temp:
lst[j+1]
, lst[j]
= lst[j]
, temp
j -=
1if j <0:
# 不限制j的索引時,j會取到-1..-n,這樣就亂了,因為索引為-1的元素,還沒有被排序
break
print
(lst)
直接插入排序
直接插入排序是一種最簡單的排序方法,它的基本思想是依次將每個記錄插入到乙個有序中去。就是說,第i i 1 遍整理時,a1,a2,ai 1已經是排好序的子串行 取出第i個元素ai,在已排好序的子串行為ai找到乙個合適的位置,並將它插到該位置上。易知上述排序當i 1時實際上為空操作,故可直接從i 2開始...
直接插入排序
直接插入排序的演算法思想 直接插入排序 straight insertion sort 的基本操作是將乙個記錄插入到已經排好序的有序表中,從而得到乙個新的 記錄數增 1 的有序表。根據該思想,編寫 如下 從已有序列的第0個記錄開始比較 public static void insertsort1 i...
直接插入排序
源文章url http student.zjzk.cn course ware data structure web paixu paixu8.2.1.1.htm 做過部分修改。1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至...