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

通过使用Python读取数字txt文件进行快速排序,python,quicksort,Python,Quicksort,我已经更新了我的程序,它没有给我一个错误。然而,它给了我相同的txt文件,没有排序 txt_array.txt 54044 14108 79294 29649 25260 60660 2995 53777 49689 9083 #快速排序,第一个元素为枢轴元素 def choosePivot(arr、l、r): i=(l-1)#第一指数 pivot=arr[l]#第一个元素是pivot 对于范围内的j(l+1,r+1): 如果arr[j]

我已经更新了我的程序,它没有给我一个错误。然而,它给了我相同的txt文件,没有排序

txt_array.txt 54044 14108 79294 29649 25260 60660 2995 53777 49689 9083

#快速排序,第一个元素为枢轴元素
def choosePivot(arr、l、r):
i=(l-1)#第一指数
pivot=arr[l]#第一个元素是pivot
对于范围内的j(l+1,r+1):
如果arr[j]<枢轴:
arr[i],arr[j]=arr[j],arr[i]#交换
i=i+1#增量i
位置=i-1#检查位置
arr[l],arr[r]=arr[position],arr[l]
返回位置
def快速排序(arr、l、r):
如果len(arr)==1:
返回arr
如果l
我的输出是

[540441410879294296492526060660299553777496899083]

指定人数:10


排序数组:[54044、14108、79294、29649、25260、60660、2995、53777、49689、9083]

错误应指定行号,但我怀疑它是:

C,txt\u数组=快速排序(txt\u数组,0,大小为1)


在这一行中,您将解包quickSort返回的任何内容,在这种情况下,它可能会失败并出现该错误。

错误应指定行号,但我怀疑它是:

C,txt\u数组=快速排序(txt\u数组,0,大小为1)


在这一行中,您将解压quickSort返回的任何内容,在这种情况下,它可能会失败并出现错误。

我想您是在
C,txt_数组=quickSort(txt_数组,0,size-1)
这一行中得到它的,对吗

C,txt\u array=quickSort(txt\u array,0,size-1)
行中,您试图将返回的值解压到变量
C
txt\u array
中,这会抛出您提到的错误,因为函数不返回任何值,这意味着它是
None

解决该问题:由于该函数在同一范围内的数组上运行,因此应足以将
C,txt\u数组=快速排序(txt\u数组,0,大小-1)
替换为
快速排序(txt\u数组,0,大小-1)
并且
txt\u数组
。(但是,我无法回答C应该是什么,因此需要单独修复)

编辑:在下面的示例中,我替换了快速排序中的代码,并选择了与函数相对的Pivot函数,然后说明了我在下面的回答中解释的原理

————从教程中借用的开始代码
def分区(arr、低、高):
i=(低-1)
枢轴=arr[高]
对于范围内的j(低、高):

如果arr[j]我想你是在
C,txt\u数组=快速排序(txt\u数组,0,size-1)
行上得到的,对吗

C,txt\u array=quickSort(txt\u array,0,size-1)
行中,您试图将返回的值解压到变量
C
txt\u array
中,这会抛出您提到的错误,因为函数不返回任何值,这意味着它是
None

解决该问题:由于该函数在同一范围内的数组上运行,因此应足以将
C,txt\u数组=快速排序(txt\u数组,0,大小-1)
替换为
快速排序(txt\u数组,0,大小-1)
并且
txt\u数组
。(但是,我无法回答C应该是什么,因此需要单独修复)

编辑:在下面的示例中,我替换了快速排序中的代码,并选择了与函数相对的Pivot函数,然后说明了我在下面的回答中解释的原理

————从教程中借用的开始代码
def分区(arr、低、高):
i=(低-1)
枢轴=arr[高]
对于范围内的j(低、高):

如果arr[j]很好,但是如果您必须在快速排序后组装数组,您不是真的合并排序吗?;)@yjay嗯,我现在明白了,你是在递归调用同一个数组,我把它误认为是被拆分成更小的数组并递归调用的。更新我的答案一点。请继续收看!:D@yjay更新!希望它能工作谢谢你的解决方案。我试图打印出控制台,这就是为什么我将C指定为排序数组并打印(C)。我用快速排序(txt_数组,0,大小-1)和txt_数组替换了C,txt_数组=快速排序(txt_数组,0,大小-1)。它在txt文件中给了我相同的txt_数组,没有排序。@QuangT-Hmm ok。你能用你正在运行的代码更新你的描述吗?提供的代码运行不好,但是如果您必须在快速排序后组装数组,您不是真的要合并排序吗?;)@yjay嗯,我现在明白了,你是在递归调用同一个数组,我把它误认为是被拆分成更小的数组并递归调用的。更新我的答案一点。请继续收看!:D@yjay更新!希望它能工作谢谢你的解决方案。我试图打印出控制台,这就是为什么我将C指定为排序数组并打印(C)。我用快速排序(txt_数组,0,大小-1)和txt_数组替换了C,txt_数组=快速排序(txt_数组,0,大小-1)。它在txt文件中给了我相同的txt_数组,没有排序。@QuangT-Hmm ok。你能用你正在运行的代码更新你的描述吗?提供的代码不运行
#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]
Numbers of given: 10
Sorted array: [2995, 9083, 14108, 25260, 29649, 49689, 53777, 54044, 60660, 79294]