插入排序
什么是插入排序?
假设数列第一个元素为已排序数列,剩余数列为未排序将待排序元素挨个插入到已排序数列中每次插入都必须保证数列是有序的,即通过比较和移动有序数列中的元素,将元素插入到合适的位置
具体实现逻辑
插入排序的核心思想:确认有序数列确定无序数列
方法一:两个for循环实现,分别比较a[i],a[j]的区别 def insertSort(arr): for i in range(1,len(arr)): for j in range(0,i): if arr[j]>arr[i]: arr[j],arr[i]=arr[i],arr[j] return arr arr=[4,8,1,9,2,7] insertSort(arr)
执行结果:
>>> def insertSort(arr):
... for i in range(1,len(arr)):
... for j in range(0,i):
... if arr[j]>arr[i]:
... arr[j],arr[i]=arr[i],arr[j]
... return arr
...
>>> arr=[4,8,1,9,2,7]
>>> insertSort(arr)
[1, 2, 4, 7, 8, 9]
>>>
方法二:两个for循环,确定一个要比较的值 def insertSort(arr): for i in range(1,len(arr)): value=arr[i]#这里定义一个要比较的值 for j in range(i,0,-1): if arr[j-1]>value: arr[j-1],arr[j]=arr[j],arr[j-1] return arr arr=[4,8,1,9,2,7] insertSort(arr) 执行结果:
>>> def insertSort(arr):
... for i in range(1,len(arr)):
... value=arr[i]#这里定义一个要比比较的值
... for j in range(i,0,-1):
... if arr[j-1]>value:
... arr[j-1],arr[j]=arr[j],arr[j-1]
... return arr
...
>>> arr=[4,8,1,9,2,7]
>>> insertSort(arr)
[1, 2, 4, 7, 8, 9]
>>>
方法三:外层使用while循环,内层使用for循环 def insertSort(arr): i=1 while i<len(arr): value=arr[i] for j in range(i,0,-1): if arr[j-1]>value: arr[j-1],arr[j]=arr[j],arr[j-1] i+=1 return arr arr=[4,8,1,9,2,7] insertSort(arr)
执行结果:
>>> def insertSort(arr):
... i=1
... while i<len(arr):
... value=arr[i]
... for j in range(i,0,-1):
... if arr[j-1]>value:
... arr[j-1],arr[j]=arr[j],arr[j-1]
... i+=1
... return arr
...
>>> arr=[4,8,1,9,2,7]
>>> insertSort(arr)
[1, 2, 4, 7, 8, 9]
>>>
方法四:两个while循环实现,不要忘记最后要++操作 def insertSort(arr): i=1 while i<len(arr): value=arr[i] j=i while j>0: if arr[j-1]>value: arr[j-1],arr[j]=arr[j],arr[j-1] j-=1 i+=1 return arr arr=[4,8,1,9,2,7] insertSort(arr)
>>> def insertSort(arr):
... i=1
... while i<len(arr):
... for i in range(1,len(arr)):
... value=arr[i]
... j=i
... while j>0:
... if arr[j-1]>value:
... arr[j-1],arr[j]=arr[j],arr[j-1]
... j-=1
... i+=1
... return arr
...
>>> arr=[4,8,1,9,2,7]
>>> insertSort(arr)
[1, 2, 4, 7, 8, 9]
方法五:外层for循环,内层while循环实现 def insertSort(arr): for i in range(1,len(arr)): j=i while j>0: if arr[j-1]>arr[j]: arr[j-1],arr[j]=arr[j],arr[j-1] j-=1 i+=1 return arr arr=[4,8,1,9,2,7] insertSort(arr)
执行结果:
>>>
>>> def insertSort(arr):
... for i in range(1,len(arr)):
... j=i
... while j>0:
... if arr[j-1]>arr[j]:
... arr[j-1],arr[j]=arr[j],arr[j-1]
... j-=1
... i+=1
... return arr
...
>>> arr=[4,8,1,9,2,7]
>>> insertSort(arr)
[1, 2, 4, 7, 8, 9]
时间复杂度