插入排序_直接插入

直接插入排序是假定前i个构成的子序列是处于已排序的情况下进行排序的,然后将第i个元素与前i个构成的子序列逆序进行比较。

如果是要升序排序,则比较第i个元素是否比j=i-1(i-1需要>=0)的元素大,如果是则第i个元素的位置(即j+1的位置上)保持不动,

反之则将j=i-1的元素放置到i的位置,再进行第i个元素与j=i-2(i-2需要>=0)的,依次进行,如果第i个元素刚好比j=i-3大,则将第i个元素插入到j=i-2(即j+1的位置)上!

 1 ''
 2 直接插入排序
 3 空间复杂度O(1),时间复杂度O(n2),稳定排序,数据量小时候不如折半查找性能
4 ''' 5 #整理后数组升序排列 6 def Zhijie_Px(arr): 7 8 for i in range(1,len(arr)): 9 if arr[i]<arr[i-1]: 10 temp=arr[i] 11 j=i-1 12 while arr[j]>temp and j>=0: 13 arr[j+1]=arr[j] 14 j -=1 15 arr[j+1]=temp 16 print(arr) 17 #整理后数组降序排列 18 def Zhijie_Px2(arr): 19 for i in range(1,len(arr)): 20 if arr[i]>arr[i-1]: 21 temp=arr[i] 22 j=i-1 23 while arr[j]<temp and j>=0: 24 arr[j+1]=arr[j] 25 j -=1 26 arr[j+1]=temp 27 # arr=arr[::-1] 28 print(arr) 29 30 Zhijie_Px([88,78,65,156,239,43]) 31 32 Zhijie_Px2([88,78,65,156,239,43]) 33 34 输出: 35 [43, 65, 78, 88, 156, 239] 36 [239, 156, 88, 78, 65, 43]

猜你喜欢

转载自www.cnblogs.com/japyc180717/p/9419631.html
今日推荐