插入排序
插入排序的原理是:当数组中前 n-1 个元素排序完成之后,将第n个元素往前推,直到此元素在前n个元素中被正确排列。
因此插入排序每次都排好前n-1个元素,再将第n个元素放到合适的位置,将此位置后面的元素往后推。
时间复杂度:插入排序同样需要进行n轮比较,每一轮会将完成排序的数组长度+1.
最优情况下,数组已经排序完成,则只需要比较n-1次。不需要排序
最坏情况下,数组倒序,则在排列第n个元素时,需要比较n-1次,交换n-1次。即总共计算次数为 n * (n-1)
所以时间复杂度最坏为 O(n^2), 最好为 O(n)
class Solution:
def array_insert_sort(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
for i in range(1,len(nums)):
for j in range(i-1,-1,-1):
if nums[i] < nums[j]:
nums[i], nums[j] = nums[j], nums[i]
i = i - 1
else:
break
print(nums)
return(nums)
if __name__ == "__main__":
sol = Solution()
result = sol.array_insert_sort([7,6,5,100,4,-3,3,9,1])