分治法之二路归并排序

文章目录


二路归并排序


一、大概思路

分治法之二路归并排序

二、代码实现

# -*- 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.读入数据

代码如下(示例):

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

下一篇

分治法之二分查找
注:代码转载之 博客csdn

上一篇:【CF639E】Bear and Paradox(贪心+二分)


下一篇:GoLand安装与环境配置