本文共 1025 字,大约阅读时间需要 3 分钟。
思想:分而治之,数组从中间划分,一分为二,递归的解决左右子集
核心:合并有序的数组 时间复杂度 o ( n l o g n ) o(nlogn) o(nlogn),以2为底 时间复杂度分析:长度为n的数组,二分需要 l o g ( n ) 次 log(n)次 log(n)次 合并有序数组,需进行规模为n的操作,所以需要 n ∗ l o g n n*logn n∗logn规模的运算缺点:需要额外的辅助空间 O ( n ) O(n) O(n)
要求:十五分钟以内写出归并排序
#python 实现归并排序#分而治之的思想 时间复杂度 O(nlogn)def merge_sort(li): # 作用 将传递进来的列表拆分到最小单元(函数的出口) if len(li) == 1: return li mid = len(li) // 2 left = li[:mid] right = li[mid:] left_li = merge_sort(left) # 判断 left列表是否为最小单元 right_li = merge_sort(right) # 判断 right列表是否为最小单元 return marge(left_li, right_li) # 合并 # print(left_li,right_li) def marge(left_li, right_li): reslut = [] while len(left_li) > 0 and len(right_li) > 0: if left_li[0] > right_li[0]: reslut.append(right_li.pop(0)) else: reslut.append(left_li.pop(0)) if left_li: reslut.extend(left_li) if right_li: reslut.extend(right_li) return resluts = merge_sort([1,5,3,2,6,8,4])print(s)
转载地址:http://xpcv.baihongyu.com/