首页 > 技术文章 > 直接插入_折半插入(python)

japyc180717 2018-08-04 20:12 原文

折半插入默认待插入值左侧部分已经排好顺序,找到合适位置,对插入点右侧已排好序的部分后移一步操作,循环直到全部点排序完成

 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]

 

推荐阅读