Lunke_ 2022-11-24 20:38 采纳率: 100%
浏览 21
已结题

python实现归并排序时,输出“[0, 0, 0, 0, 0, 0, 0, 0]”

问题遇到的现象和发生背景

python实现归并排序时 ,单独调用merge可以输出正确,但是sort、merge一起调用输出结果

[0, 0, 0, 0, 0, 0, 0, 0]

自学数据结构到归并排序,不知道哪里有错误

用代码块功能插入代码,请勿粘贴截图
import sys
sys.setrecursionlimit(100000) #例如这里设置为十万

def sort(arr,low,high):
    if low < high :
        mid = int((low+high)/2)
        sort(arr,low,mid)
        sort(arr,mid+1,high)
        merge(arr,low,mid,high)
    return arr


def merge(arr,low,mid,high):
    temp1 = [0]*len(arr)
    
    x = low
    y = mid + 1
    i = 0
    while x<mid and y<high:
        if arr[x] <= arr[y]:
            '''print(x)'''
            temp1[i] = arr[x]
            i += 1
            x += 1
        else:
            ''' print(y)'''
            temp1[i] = arr[y]
            i += 1
            y += 1
    while y<=high:
        temp1[i] = arr[y]
        i += 1
        y += 1

    while x<=mid:
        temp1[i] = arr[x]
        i += 1
        x += 1
    a = 0
    b = 0
    while a < len(arr):
        arr[a] = temp1[b]
        a += 1
        b += 1
    return arr
        


arr = [7,1,4,9,3,5,2,8]
low = 0
high = len(arr)-1
mid =int((low+high)/2)

print (sort(arr,low,high))

运行结果及报错内容

运行结果:[0, 0, 0, 0, 0, 0, 0, 0]

我的解答思路和尝试过的方法

def merge(arr,low,mid,high):
    temp1 = [0]*len(arr)
    
    x = low
    y = mid + 1
    i = 0
    while x<mid and y<high:
        if arr[x] <= arr[y]:
            '''print(x)'''
            temp1[i] = arr[x]
            i += 1
            x += 1
        else:
            ''' print(y)'''
            temp1[i] = arr[y]
            i += 1
            y += 1
    while y<=high:
        temp1[i] = arr[y]
        i += 1
        y += 1

    while x<=mid:
        temp1[i] = arr[x]
        i += 1
        x += 1
    a = 0
    b = 0
    while a < len(arr):
        arr[a] = temp1[b]
        a += 1
        b += 1
    return arr

arr = [1,4,7,9,2,3,5,8]
low = 0
high = len(arr)-1
mid =int((low+high)/2)

print (merge(arr,low,mid,high))
运行结果及报错内容

运行结果:[1, 2, 3, 4, 5, 8, 7, 9]

  • 写回答

1条回答 默认 最新

  • 阿_旭 2022-11-25 17:09
    关注

    可参考博文:https://blog.csdn.net/qq_42589613/article/details/110431662

    
    # -*- coding: utf-8 -*-
    def merge(left, right):
        # 合并两个有序列表
        res = []
        while len(left) > 0 and len(right) > 0:
            if left[0] < right[0]:
                res.append(left.pop(0))
            else:
                res.append(right.pop(0))
        if left:
            res.extend(left)
        if right:
            res.extend(right)
        return res
    
    def mergeSort(arr):
        # 归并函数
        n = len(arr)
        if n < 2:
            return arr
        middle = n // 2
        left = arr[:middle] # 取序列左边部分
        right = arr[middle:]# 取序列右边部分
        # 对左边部分序列递归调用归并函数
        left_sort = mergeSort(left)
        # 对右边部分序列递归调用归并函数
        right_sort = mergeSort(right)
        #
        return merge(left_sort, right_sort)
    arr = [1,4,7,9,2,3,5,8]
    a = mergeSort(arr)
    print(a)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 11月24日

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了