ef fib(n): """ 递归:时间复杂度O(2**n),空间复杂度O(N),树的高度""" if n < 3: return 1 else: return fib(n - 1) + fib(n - 2) # fib(6)=fib(5)+fib(4) # 1,1,2,3,5,8 def fib2(n): """ 循环:时间复杂度O(N),空间复杂度O(1)""" a,b =0,1 for x in range(n): a,b = b,a+b return b def fib_while(n): """ 循环:T=O(N),S=O(1)""" a,b=0,1 i=1 while i<=n : print(b,end=" ") i =i+1 a,b =b,a+b # 二分法: s = list(range(1,10)) def bin_search(arr,x): l,r = 0,len(arr)-1 # 左边小于右边 while l <=r : mid = (l + r )// 2 if x < arr[mid]: r = mid -1 elif x > arr[mid]: l = mid +1 else : return mid return False # 左大于右边 def bin_search_recur(arr,x): k = len(arr) if k<1: return False mid = k//2 if x< arr[mid]: return bin_search_recur(arr[:mid-1],x) elif x> arr[mid]: return bin_search_recur(arr[mid+1:],x) else : return True def insert_sort(arr): for j in range(1,len(arr)): # j-1,j =3,1 while arr[j] < arr[j-1]: temp = arr[j - 1] arr[j-1] = arr[j] arr[j] =temp j =j-1 return arr def bin_x(arr,x): mid =len(arr)// 2 if x< arr[mid]: bin_x(arr[:mid-1],x) elif x > arr[mid]: bin_x(arr[mid+1:],x) else: return mid def bin_whiles(arr,x): """ :param arr: :param x: :return: mid index 索引 """ l,r = 0 ,len(arr)-1 while l<=r: mid = (l+r)// 2 if x< arr[mid] : r = mid-1 elif x> arr[mid] : l =mid +1 else : return mid def quick_sort(arr): """快速排序""" if len(arr) < 2: return arr # 选取基准,随便选哪个都可以,选中间的便于理解 mid = arr[len(arr) // 2] # 定义基准值左右两个数列 left, right = [], [] # 从原始数组中移除基准值 arr.remove(mid) for item in arr: # 大于基准值放右边 if item >= mid: right.append(item) else: # 小于基准值放左边 left.append(item) # 使用迭代进行比较 return quick_sort(left) + [mid] + quick_sort(right) def sr(arr): """ T= nlog(N),S= nlog(N)""" if len(arr)<2: return arr mid =arr[len(arr) // 2] arr.remove(mid) l,r = [],[] for k in arr: if k >= mid: r.append(k) else: l.append(k) return sr(l)+[mid]+sr(r) def hashT(arr,const=10): hashMap={} for x in range(len(arr)): y = const-arr[x] # 在hash表值,y 对应的索引不等于 if y in arr and hashMap.get(y) != arr[x]: print(arr[x],x,y,arr.index(y)) hashMap[arr[x]]=y print(hashMap) # for x in range(len(arr)): # y = const-arr[x] # # 在hash表值,且在arr,不等于自己 # if y in hashMap.values() and y !=x and y in arr: # print(arr[x],y) if __name__ == '__main__': s= [5,1,6,3,7,1,4,5] print(insert_sort(s))