当前位置: 首页 > 知识库问答 >
问题:

合并排序在Python中返回相同的数组

南宫星波
2023-03-14

对于合并排序,我写了这样的代码:我已经测试了合并功能,工作正常。但是在mergeSort函数中,我不能处理数组。它返回与输入列表相同的列表。

def mergeSort(a):
    l, h = 0, len(a)-1
    mid = (l+h)/2
    if (l<h-1):                 #the lowest length must be 2
        mergeSort(a[l:mid+1])
        mergeSort(a[mid+1:h+1])
    return merge(a[l:mid+1],a[mid+1:h+1])

def merge(a,b):
    n_a = len(a)
    n_b = len(b)
    c = [[] for i in range(n_a + n_b)]
    i,j,k=0,0,0
    while (i<n_a and j<n_b):
        if a[i]<b[j]:
            c[k] = a[i]
            i += 1
        else:
            c[k]= b[j]
            j += 1
        k += 1
    while(i<n_a):
        c[k] = a[i]
        k+=1
        i+=1
    while(j< n_b):
        c[k] = b[j]
        k+=1
        j+=1
    return c

共有1个答案

郑晗日
2023-03-14

我将把merge重写为:

def mergeSort(a):
    h = len(a)
    mid = h / 2
    if h >= 2:
        return merge(mergeSort(a[:mid]), mergeSort(a[mid:]))
    else:
        return a

几个注意事项:

  • l总是0,不妨去掉
  • hlen(a)-1,但接下来你使用h 1,不妨使用h=len(a)
  • 实际写h

 类似资料:
  • 我写了3个方法来实现递归合并排序,参数数量有限(没有aux、lo、mid、hi)。我认为我的工作是这样的,但它并没有返回一个排序数组,尽管它在运行时没有任何编译错误。我已经摆弄了4个小时,似乎无法弄清楚我做错了什么,没有合并一个有序数组。我只从我的助教那里得到了非常模糊的输入,并且能够修复我正在遇到的一些问题,但是该方法仍然没有对项数组进行排序。欢迎任何关于我在这里做错了什么的建议。谢谢!

  • 我在Java中实现合并排序算法时遇到了一个问题:我做过合并排序算法,但它不能产生正确的结果。我还从函数中返回排序列表。我怎么也能做到这一点? 下面是我定义的合并排序算法。 合并排序方法: MergeSort函数: 合并算法: 实现比较器功能 我该怎么做?

  • 我想用Javascript实现合并排序作为一种学习经验。我有mergeSort(unsortedArray)函数,它接受一个未经排序的数组,并使用合并排序策略对其进行排序。mergeSort()调用merge(leftArray,rightArray),后者将两个数组合并在一起,得到一个数组。 我认为问题出在merge()函数上。在数组[8,8,7,5,4,6,3,2,1,5,9,8,7,6,5,

  • 事情是这样的。我在做leetcode 164最大间隙。最佳解决方案是桶排序。 这让我对排序问题有了更多的思考。假设我们有如下列表: 2、5、19、444、-14、89、16、77 我认为,我们可以用两个不同的范围来排列这些数字,(min, mid)(mid, max)和mid-应该是min(max-min)/2; 因此我们得到了(-14215)(216444) 我们将min设置为最左侧,max设置

  • 问题内容: 在hive中,我希望对从最大到最小的数组进行排序,并获得索引数组。 例如,该表是这样的: 我要得到这个: 结果中的arries是初始元素的索引。我怎样才能做到这一点? 问题答案: 使用posexplode爆炸数组以获取索引和值,按值排序,收集索引数组: 经过测试,结果:

  • 我知道类似的问题也有人问过,我也研究过很多网站。我已经尝试使用一些答案,但我的代码仍然不能工作。 我正在经历以前的作业,以帮助建立我的Java知识。请原谅我的代码中的任何错误,我还在学习Java。 假设两个输入数组中的元素都按非递减顺序排序(例如[0,1,2,2]和[1,2,3,3,4,5])。返回的“合并”数组必须保留此属性(例如[0,1,1,2,2,2,3,3,4,5])。 输入和输出都允许重