社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

我下面的python合并排序代码有什么问题?

naveen kumar • 3 年前 • 1271 次点击  

合并排序

这是显示错误,我无法理解,请帮助合并排序,这是显示出索引,但我无法理解,如何请任何人更新,请帮助我?

def mergesort(a,low,high):
    if(low<high):
        mid=(high+low)//2
        mergesort(a,low,mid)
        mergesort(a,mid+1,high)
        merge(a,low,mid,high)
def merge(a,low,mid,high):
    i=low
    j=mid+1
    while(i<=mid and j<=high):
        if(a[i]<=a[j]):
            print(a[i])
            c.append(a[i])
            i+=1
        else:
            c.append(a[j])
            j+=1
a=[4,2,7,0,9,6,5]
c=[]
mergesort(a,0,len(a))
print(c)
    

my merge sort algo not working

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128738
 
1271 次点击  
文章 [ 1 ]  |  最新文章 3 年前
Tim Roberts
Reply   •   1 楼
Tim Roberts    3 年前

修复索引后,还有其他问题。“Mergesort”应该就地进行排序,修改原始列表。你没有那样做;你在试图建立一个新的列表。这意味着您需要返回已创建的列表,并在下一步中使用它。

然后, c 不能是全球性的。它是“merge”函数的本地调用,因此每个调用都有自己的副本。最后,每个合并步骤只处理列表的一部分。你必须复制你没有改变的部分。这似乎有效:

def mergesort(a,low,high):
    if low<high:
        mid=(high+low)//2
        a = mergesort(a,low,mid)
        a = mergesort(a,mid+1,high)
        a = merge(a,low,mid,high)
    return a
def merge(a,low,mid,high):
    c = a[:low]
    i=low
    j=mid+1
    while i<=mid and j<=high:
        if a[i]<=a[j]:
            print(a[i])
            c.append(a[i])
            i+=1
        else:
            print(a[i])
            c.append(a[j])
            j+=1
    c.extend( a[i:mid+1] )
    c.extend( a[j:] )
    return c

a=[4,2,7,0,9,6,5]
c = mergesort(a,0,len(a)-1)
print(c)