十大经典排序算法--归并排序
归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
#!/usr/bin/env python # coding:utf-8 def merge_sort(array,left,right): if left < right: middle = int((right + left)/2) merge_sort(array,left,middle) merge_sort(array,middle+1,right) merge(array,left,right,middle) def merge(array,left,right,middle):
"""
前半部分是已经排序, 后半部分已经排序
Merge 就是把 array 左半部分,和右半部分分别 取出一个值比较,谁小 ,谁就放在arr[] 数组里面,
最后如果 left_array或者right_array其中一个有剩余, 直接 copy 到 array[]数组里面;
""" n1 = middle-left+1 n2 = right-middle # 创建临时数组 L = [0]*n1 R = [0]*n2 # 拷贝数据到临时数组 arrays L[] 和 R[] for i in range(n1): L[i] = array[left+i] for j in range(n2): R[j] = array[middle+1+j] # 归并临时数组到 arr[left..right] i=0 # 初始化第一个子数组的索引 j=0 # 初始化第二个子数组的索引 k=left # 初始归并子数组的索引 while i < n1 and j < n2: if L[i] < R[j]: array[k] = L[i] i+=1 else: array[k] = R[j] j+=1 k+=1
# 拷贝 L[] 的保留元素 while i < n1: array[k] = L[i] i+=1 k+=1
# 拷贝 R[] 的保留元素 while j < n2: array[k] = R[j] j+=1 k+=1 if __name__ == "__main__": data=[1,3,5,7,9,2,4,6,8,0] left=0 right=len(data)-1 merge_sort(data,left,right) print(data)
参考链接:
https://www.runoob.com/python3/python-merge-sort.html
https://blog.nowcoder.net/n/90762915b1e04336b62683a843c4d3a3?from=nowcoder_improve
分类:
算法题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类