十大经典排序算法--归并排序

归并排序(英语: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

 

posted @   超级宝宝11  阅读(69)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示