1、直接插入排序
直接插入排序原理。
在未排序的序列中,構建一個子排序序列,直至全部數據按照要求排序完成。
將待排序的數,插入到已經排序的序列中合適的位置。
增加一個哨兵,放入待比較值,讓他和后面已經排好序的序列比較,插入合適的地方。
2、原理
增加一個哨兵位,每輪比較將待比較數放入。
哨兵依次和待比較的前一個數據比較,大的數靠右移動,找到哨兵中的值插入位置.
每一輪結束后,得到一個從開始到待比較數的位置的一個有序序列。
3、總結
最好情況,正好是升序排列,比較迭代n-1次。
最差情況,正好是降序排列,比較迭代1,2,,.....n-1即n(n-1)/2
使用兩層嵌套循環,時間復雜度O(n**2)
穩定排序算法。
使用在小規模數據比較
優化點:
如果比較操作耗時大的話,可以采用二分查找的方式來提高效率。(查找是在已經排序的區域). if判斷加上循環。
4、#插入排序
#思路,增加一個哨兵崗位,數據依次和哨兵崗位比較,大數右移,直到放到合適為止。
list3 = [3,9,0,1,5,7,2,4,8,6]
nums = [0] + list3
length = len(nums)
count = 0
count_swap = 0
for i in range(2,length):
nums[0] = nums[i]
j = i -1 #前一個數的索引
count += 1
if nums[j] > nums[0]:
while nums[j] > nums[0]: #大數右移
nums[j+1] = nums[j] #依次右移
j -= 1 #右移幾次就要減去幾次
count_swap += 1
nums[j+1] = nums[0] #在插入右側+1
