我已经更新了我的程序,它没有给我一个错误。然而,它给了我相同的txt文件,没有排序
txt_array.txt540441410879294296492526060660299553777496899083
#QuickSort with first element to be a pivot element
def choosePivot(arr, l, r):
i = (l - 1) #first index
pivot = arr[l] #first element to be a pivot
for j in range(l+1, r+1):
if arr[j] < pivot:
arr[i], arr[j] = arr[j], arr[i] #swapping
i=i+1 #increment i
position = i-1 #checking position
arr[l], arr[r] = arr[position], arr[l]
return position
def quickSort(arr, l, r):
if len(arr) == 1:
return arr
if l < r:
p = choosePivot(arr, l, r)
quickSort(arr, l, p-1)
quickSort(arr, p+1, r)
def readFile(filename, l):
# f = open(filename, "r")
with open(filename, "r") as f:
for line in f:
l.append(int(line))
if f.closed == False:
f.close()
def main ():
txt_array = []
size = len(txt_array)
readFile("array.txt", txt_array)
print (txt_array[:]) #Appear all numbers of the array
print ("Numbers of given: " + str(len(txt_array)))
quickSort(txt_array, 0,size-1)
print("Sorted array: " + str(txt_array))
return 0
main()
输出是
[54044, 14108, 79294, 29649, 25260, 60660, 2995, 53777, 49689, 9083]
给定数:10
已排序数组:[54044,14108,79294,29649,25260,60660,2995,53777,49689,9083]
错误应该指定行号,但我怀疑它是:
C,txt_array = quickSort(txt_array, 0,size-1)
在这行中,您解压缩quickSort返回的任何内容,可能是None,在这种情况下,它将失败并产生该错误。
我想你在C, txt_array = quickSort(txt_array, 0, size-1)
上得到了它,对吗?
在C, txt_array = quickSort(txt_array, 0, size-1)
行中,您试图将返回值解包为变量C
和txt_array
,这会引发您提到的错误,因为该函数不返回任何值,这意味着它是None
。
解决它由于该函数操作的是同一作用域内的数组,因此将C, txt_array = quickSort(txt_array, 0, size-1)
替换为quickSort(txt_array, 0, size-1)
应该足够了,并且txt_array
仍然应该排序。(然而,我不能回答什么C是预期的,所以你需要单独修复)
编辑:在下面的示例中,我替换了快速排序中的代码,并选择了pivot函数,而不是本教程中的函数,然后说明了我在下面的答案中解释的原理。
# ------- START code borrowed from tutorial
def partition(arr, low, high):
i = (low-1)
pivot = arr[high]
for j in range(low, high):
if arr[j] <= pivot:
i = i+1
arr[i], arr[j] = arr[j], arr[i]
arr[i+1], arr[high] = arr[high], arr[i+1]
return (i+1)
def quickSort(arr, low, high):
if len(arr) == 1:
return arr
if low < high:
pi = partition(arr, low, high)
quickSort(arr, low, pi-1)
quickSort(arr, pi+1, high)
# ------- END code borrowed from tutorial
def readFile(filename, l):
with open(filename, "r") as f:
for line in f:
l.append(int(line))
if f.closed == False:
f.close()
def main():
txt_array = []
readFile("array.txt", txt_array)
size = len(txt_array)
print (txt_array[:]) #Appear all numbers of the array
print ("Numbers of given: " + str(len(txt_array)))
quickSort(txt_array, 0, size-1)
print("Sorted array: " + str(txt_array))
main()
这将输出
[54044, 14108, 79294, 29649, 25260, 60660, 2995, 53777, 49689, 9083]
Numbers of given: 10
Sorted array: [2995, 9083, 14108, 25260, 29649, 49689, 53777, 54044, 60660, 79294]