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

QuickSort Python TypeError:只能为

巩选
2023-03-14

根据我在quicksort中的理解,您首先选择最右边的元素作为枢轴,然后将大于枢轴的元素移到枢轴的右边,将小于枢轴的元素移到枢轴的左边。一旦枢轴移到右点,比方说移到中间,数组就会被分成两半,在这两半中,您可以使用与前面所述相同的步骤,递归地对两个数组进行排序,从开头开始,在枢轴之前结束,在枢轴之后开始,直到数组的结尾。在分配以下两行代码对两个数组的一半进行排序时,我不断得到一个类型错误“typeerror:can only assign an iterable”。

有问题的代码

array[:pivot] = quicksort(array[:pivot])
array[pivot+1:] = quicksort(array[pivot+1:])
def quicksort(array):
    
    if len(array) >1 :
        
        low = 0;
        pivot = len(array) -1;
    
        while low < pivot:
            if array[low] > array[pivot]:
        
                tempPivot = array[pivot]
                tempLow = array[low]
                tempPivotPrev = array[pivot-1]
                
                array[pivot] = tempLow
                array[pivot-1] = tempPivot
                array[low] = tempPivotPrev
                
                
                pivot=-1
            else:
                low=+1
                
            array[:pivot] = quicksort(array[:pivot])
            array[pivot+1:] = quicksort(array[pivot+1:])

    
        return array

test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]
print quicksort(test)

共有1个答案

班昱
2023-03-14

结果我比较透视和元素的比较逻辑是不正确的,我应该递归排序while循环之后的两半。

def quicksort(array):

    
    if len(array) >1:
        
        pivot = len(array) - 1
        low = 0

        while low < pivot:
            if array[low]>array[pivot]:
                tempPivot = array[pivot]
                tempLow = array[low]
                array[low] = array[pivot-1]
                array[pivot] = tempLow
                array[pivot-1] = tempPivot
                pivot -= 1
            else:
                low += 1
       
        array[:pivot] = quicksort(array[:pivot])
        array[pivot+1:] = quicksort(array[pivot+1:])
        
    return array
        
            
        

test = [21, 4, 1, 3, 9, 20, 25, 6, 21, 14]
print quicksort(test)
 类似资料:
  • 由于这里有一些很好的答案,我基本上(显然是以有限的方式)理解了Haskell的的目的,并且它的定义是 然而,我不太清楚为什么是这个定义的一部分。据我所知,这就是本身的定义所在,但相关的留档并没有对此做太多说明。 我认为在

  • 我现在的目标是创建一个网格,这将是我的游戏的基础。当玩家从菜单开始游戏时,这个网格应该出现在游戏场景上。稍后,我希望能够根据用户输入更改电路板的大小 1.在eventhandler中创建网格 我的推理是当玩家点击启动游戏的“SinglePlayer”按钮时创建网格。根据这个推理,我将简单地获取根节点(一个组)的子节点,并将gridpane添加到其中 为什么我被困住了 下面的代码段显示处理on bu

  • 本文向大家介绍限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数,包括了限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数的使用技巧和注意事项,需要的朋友参考一下 onlyNumber.html 测试代码: 以上代码内容简单给大家介绍了限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数的知识,希望能够帮助到大家!

  • 问题内容: 为什么我可以做到这一点而没有任何错误: 虽然我定义了这个: 如果我的协议中的定义大部分被忽略(getter,setter定义),为什么我仍要使用它们? 问题答案: 根据官方文件: 可以通过多种方式通过符合类型来满足吸气剂和设置剂的要求。如果属性声明同时包含get和set关键字,则符合条件的类型可以使用存储的变量属性或既可读又可写的计算属性(即,同时实现getter和setter的)来实

  • 是否可以只合并一些列?我有一个数据帧df1和列x、y、z,df2和列x、a、b、c、d、e、f等等。 我想合并x上的两个数据帧,但我只想合并df2. a、df2.b列——而不是整个数据帧。 结果将是一个包含x、y、z、a、b的数据帧。 我可以合并然后删除不需要的列,但似乎有更好的方法。

  • 问题内容: 我这样做: 并获得此异常: 不兼容的类型:Intf不是功能接口接口Intf中存在多个非重写的抽象方法。用-Xdiags:verbose重新编译以获得完整的输出1错误 是否有任何条件不能使用lambda替换匿名类? 问题答案: 否。没有办法“克服”这一问题。功能接口必须只有一种抽象方法。您的界面有两个: 注意:您不需要注释中提到的界面注释。但是,如果您的接口不是有效的功能接口,则可以使用