概览
插入排序
直接插入排序
将数组分为两部分,前半部分有序,后半部分无序,依次从后面取数据,插入到前面指定位置。
def insertSort(nums):
size = len(nums)
for i in range(1, size):
temp = nums[i] # 待排序的数据
count = i-1 # 代表前面有count个数据
while count >= 0 and nums[count] > temp:
nums[count+1]= nums[count]
count -= 1
nums[count+1] = temp
return nums**加粗样式**
插入排序:
时间复杂度:最好:O(n) 最差 :O(n^2)
空间复杂度:O(1)
折半插入
该方法和直接插入排序的方法有些类似,只是在搜索最佳插入位置的时候采用折半搜索,折半上搜索可以看另一篇文章:二分查找法技巧
def insert_sort_op(nums):
size = len(nums)
for i in range(1, size):
start = 0
end = i - 1
target = nums[i]
while start <= end:
mid = start + (end - start) // 2
if nums[mid] <= target:
start = mid + 1
else:
end = mid - 1
# 将 [end+1,i-1]位置的数据都往后移动一位
for i in range(i - 1, end, -1):
nums[i + 1]