直接插入排序(Straight Insertion Sort)
基本思想
- 往已有的有序序列中插入需要排序的值
- 已排序完畢的數列是有序的
- 將第一個元素看做一個有序的序列,從第二個元素開始一直往前插入排序
- 每次插入得到元素個數加1的新序列
- 如果碰見一個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒有改變,從原無序序列出去的順序就是排好序後的順序,保證插入排序是穩定的
def insert_sort(arr):
n = len(arr)
for i in range(1,n):# 如果大於arr[i-1]就就直接插在最後開始下一個
if arr[i]<arr[i-1]: #將第i個元素與前一個已排好序列的最後一個比較
j = i - 1
temp = arr[i] # 記錄當前待排序的元素
arr[i] = arr[i-1] # 將待排序元素向前移動一位
while temp<arr[j] and j>=0: # 判斷待排序元素與前一位的大小,由於Python的列表存在負索引,這裏要判斷j>=0
arr[j+1] = arr[j] #元素後移
j = j -1
arr[j+1] = temp # 插入
showarr(arr,i) # 打印每一趟排序的結果
def showarr(arr,i):
print("第"+str(i)+"次:",end='')
n = len(arr)
for j in range(n):
print(arr[j],end=' ')
print('\n')
def test():
arr = [4,6,2,3,6,7,8,1,16,5]
insert_sort(arr)
if __name__ == '__main__':
test()
每次比較的時候與前面排好序的序列的最後一個元素開始比較,比它大就開始下一個排序,比它小則繼續往前比較,找到>=的位置插入