
from heapq import mergedef merge_sort(array: list): """归并排序 Example: >>> myArray = [36, 25, 48, 12, 25, 65, 43, 57] >>> [12, 25, 25, 36, 43, 48, 57, 65] """ if len(array) <= 1: return array else: middle = len(array) // 2 left = merge_sort(array[:middle]) right = merge_sort(array[middle:]) return list(merge(left, right))
def merge_sort(lst): if len(lst) <= 1: return lst def merge(left, right): merged = [] while left and right: merged.append(left.pop(0) if left[0] <= right[0] else right.pop(0)) while left: merged.append(left.pop(0)) while right: merged.append(right.pop(0)) return merged middle = int(len(lst) / 2) left = merge_sort(lst[:middle]) right = merge_sort(lst[middle:]) return merge(left, right)
def merge_sort(seq): """递归版本""" if len(seq) <= 1: # 只有一个元素是递归出口 return seq else: mid = int(len(seq)/2) left_half = merge_sort(seq[:mid]) right_half = merge_sort(seq[mid:]) # 合并两个有序的数组 new_seq = merge_sorted_list(left_half, right_half) return new_seqdef merge_sorted_list(sorted_a, sorted_b): """ 合并两个有序序列,返回一个新的有序序列 """ length_a, length_b = len(sorted_a), len(sorted_b) a = b = 0 new_sorted_seq = list() while a < length_a and b < length_b: if sorted_a[a] < sorted_b[b]: new_sorted_seq.append(sorted_a[a]) a += 1 else: new_sorted_seq.append(sorted_b[b]) b += 1 # 最后别忘记把多余的都放到有序数组里 if a < length_a: new_sorted_seq.extend(sorted_a[a:]) else: new_sorted_seq.extend(sorted_b[b:]) return new_sorted_seq