折半插入默认待插入值左侧部分已经排好顺序,找到合适位置,对插入点右侧已排好序的部分后移一步操作,循环直到全部点排序完成
1 ''' 2 折半插入 3 时间复杂度O(pow(n,2) 4 ''' 5 def Zheban_Px(arr): 6 for i in range(1,len(arr)): 7 if arr[i] < arr[i - 1]:#首先判断插入值左侧列表最大值是否大于插入的值,如果不大于,就不用排序,如果小于执行以下操作 8 temp=arr[i] #待插入值 9 low=0 10 high=i-1 11 while low<=high : #很重要 12 middle=int((low+high)/2) 13 if arr[middle]<temp: 14 low=middle+1 15 else: 16 high=middle-1 17 18 for j in range(i-1,high,-1):插入点右侧值全部后移 19 arr[j+1]=arr[j] 20 arr[high+1]=temp #插入点 21 print(arr) 22 23 Zheban_Px([88,78,65,156,239,43]) 24 输出: 25 [43, 65, 78, 88, 156, 239]