二路归并排序
一、大概思路
二、代码实现
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 16 09:34:33 2021
@author: lenovo
转载:https://blog.csdn.net/u010339879/article/details/78251211?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163729649116780264024251%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163729649116780264024251&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-78251211.pc_search_es_clickV2&utm_term=%E4%BA%8C%E8%B7%AF%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8Fpython&spm=1018.2226.3001.4187
"""
array = [32,15,11,26,53,87,3,61]
def Merge(array,low,middle,high):
n1 = middle -low +1;
n2 = high-middle
left_array=[]
right_array=[]
# 可以理解相当于申请一块空间
for t in range(0, int(n1)):
left_array = ['0'] + left_array
for t in range(0, int(n1)):
right_array = ['0'] + right_array
# 把array 左边的值,放到left_arr 数组里面
for i in range(0,n1):
left_array[i]=array[i+low]
# 把 array 右边的值,放到 right_arr 数组里面
for j in range(0,n2):
right_array[j]=array[j+middle+1]
i,j =0,0
k = low
while i!=n1 and j !=n2:
if left_array[i]<= right_array[j]:
array[k]=left_array[i]
k += 1
i += 1
else:
array[k]=right_array[j]
k += 1
j += 1
while i < n1:
array[k]=left_array[i]
k += 1
i += 1
while j< n2:
array[k]=right_array[j]
k += 1
j += 1
def MergeSort(array,p,q):
if p< q:
# 转成int 类型
mid =int((p+q)/2)
MergeSort(array,p,mid)
MergeSort(array,mid+1,q)
Merge(array,p,mid,q)
MergeSort(array, 0, 7)
print(array)
2.打印结果
下一篇
分治法之二分查找
注:代码转载之 博客csdn
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/133832.html