Python3快速排序。最后一个Pi

2024-06-17 09:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

感谢您抽出时间来阅读这篇文章:)我正在用python实现我自己的quicksort版本,我也在尝试让它在一些限制条件下工作,这是以前学校作业的一部分。因为我不知道为什么我在项目中没有使用它。在

对于整数和字符串,它工作得很好,但我无法将其应用于CounterList(),后者是一个节点列表,每个节点中都包含任意整数和字符串,即使我只是按这些节点中包含的整数进行排序。在

粘贴箱:


from classes_1 import CounterNode, CounterList

def bulk_append(array1, array2):
    # takes all the items in array2 and appends them to array1
    itr = 0
    array = array1
    while itr < len(array2):
        array.append(array2[itr])
        itr += 1
    return array



def quickSort(array):
    lss = CounterList()
    eql = CounterList()
    mre = CounterList()

    if len(array) <= 1:
        return array # Base case.

    else:
        pivot = array[len(array)-1].count # Pivoting on the last item.
        itr = 0
        while itr < len(array)-1: 
        # Essentially editing "for i in array:" to handle CounterLists
            if array[itr].count < pivot:
                lss.append(array[itr])
            elif array[itr].count > pivot:
                mre.append(array[itr])
            else:
                eql.append(array[itr])
            itr += 1

        # Recursive step and combining seperate lists.    
        lss = quickSort(lss)
        eql = quickSort(eql)
        mre = quickSort(mre)
        fnl = bulk_append(lss, eql)
        fnl = bulk_append(fnl, mre)
        return fnl

我知道这可能很简单,但我似乎看不出问题所在。 (以最后一项为中心)

以下是我使用的测试:

^{pr2}$

以及由此产生的反列表:

['qck': 1, 'Fuu': 3, 'Eek': 5, 'Doh': 7, 'Cah': 9, 'ack': 11]

你可以看出,缺少多个值? 不管怎样谢谢你的建议和时间。在


Tags: 列表len节点整数bulkarrayeqlmre
1条回答
网友
1楼 · 发布于 2024-06-17 09:51:28

代码中有两个错误:

  1. 您不需要“eql=quickSort(eql)”行,因为它包含所有相等的值,所以不需要排序。

  2. 在每次递归调用中,您都会丢失pivot(缺少条目的原因),因为您没有将它附加到任何列表中。你需要把它附加到eql中。所以在下面所示的代码行之后:

    pivot=array[len(array)-1].计数

插入此行:

eql.append(array[len(array)-1])

另外,请从代码中删除以下行,因为它有时可能会导致递归深度(如果选择了任何重复值作为枢轴,则仅对具有某些重复值的数组):

^{pr2}$

相关问题 更多 >