通过使用Python读取数字文本文件进行快速排序



我已经更新了我的程序,它没有给我一个错误。然而,它给了我相同的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)行中,您试图将返回值解包为变量Ctxt_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]

最新更新