Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速排序,第一个元素作为轴心,快速代码检查_Python_Quicksort - Fatal编程技术网

Python 快速排序,第一个元素作为轴心,快速代码检查

Python 快速排序,第一个元素作为轴心,快速代码检查,python,quicksort,Python,Quicksort,尝试使用列表的第一个元素作为轴心进行快速排序 这件事已经过去好几个小时了,就是找不到我的错误 def quickSort(aList, l, r): #global count if l < r: swap = l+1 for run in range (l+1,r): if aList[l] > aList[run]: aList[swap],aList[

尝试使用列表的第一个元素作为轴心进行快速排序

这件事已经过去好几个小时了,就是找不到我的错误

def quickSort(aList, l, r):
    #global count
    if l < r:
        swap = l+1
        for run in range (l+1,r):            
            if aList[l] > aList[run]:
                aList[swap],aList[run]=aList[run],aList[swap]
                swap += 1
            run += 1
        aList[l],aList[swap]= aList[swap],aList[l]
        quickSort(aList, l, swap-1)
        quickSort(aList, swap+1, r)


testl=[4,6,3,7,2]
print testl
quickSort(testl,0,len(testl)-1)
print testl
输出为:

[4,6,3,7,2]

[3,6,4,2,7]
有人看到我哪里出错了吗?pivot元素似乎位于正确的位置,但不是idk:

我认为您的代码无法处理这样的情况:

2 5 3 7 6
在这种情况下,轴心比所有其他元素都小,所以swap不能更改。在循环之前更改轴心,然后对其余的进行排序。此外,您不需要在循环中递增run。我像贝娄一样修改了你的代码,现在它工作了。还有一件事,如果你写rangel+1,r,你会错过最后一个元素。因为您是这样调用函数的:quickSorttestl,0,lentestl-1


修改你的代码如下

def quickSort(aList, l, r):
  if l < r:
    swap = l+1
    pivot = aList[l]
    for run in range (l+1,r):
        if pivot > aList[run]:
          aList[swap],aList[run] = aList[run],aList[swap]
          swap+=1

    aList[l],aList[swap-1] = aList[swap-1],aList[l]
    quickSort(aList, l, swap-1)
    quickSort(aList, swap, r)
return aList


test = [4,6,3,7,2]
t = quickSort(test,0,len(test))
print t

为什么对一个你根本不用的变量有一个全局声明?!你做了什么调试;最短的失败例子是什么?你是说计数?我只是还没删掉。。应该计算比较的次数。。但如果排序根本不起作用,那就没有意义了。即使有3个数字,它也不起作用:请阅读-这是一个致命的赠品,你没有费心将你的代码删减到只需要重新创建问题的内容。我希望我的编辑使它更好。我建议你用打印语句和/或使用例如可视化它的操作来丰富你的代码。你目前的逻辑至少有两个缺陷。所以。。。你改变了什么,为什么?
def quickSort(aList, l, r):
  if l < r:
    swap = l+1
    pivot = aList[l]
    for run in range (l+1,r):
        if pivot > aList[run]:
          aList[swap],aList[run] = aList[run],aList[swap]
          swap+=1

    aList[l],aList[swap-1] = aList[swap-1],aList[l]
    quickSort(aList, l, swap-1)
    quickSort(aList, swap, r)
return aList


test = [4,6,3,7,2]
t = quickSort(test,0,len(test))
print t