我是python的新手,只是为了熟悉语法,我正在制作我已用C ++和Java编写的程序。
def swap(p , q):
temp = array[p]
array[p] = array[q]
array[q] = temp
def partition(beg , end):
l = beg
x = array[beg]
for j in range(l+1,end) :
if(array[j] <= x):
l += 1
swap(l , j)
swap(l, beg)
return l
def quick(beg , end):
if(beg <= end):
mid = partition(beg , end)
quick(beg , mid - 1)
quick(mid + 1 , end)
array = []
n=int(input("\nEnter the number of terms: "))
print("\nEnter the terms")
for i in range(0,n):
val = int(input())
array.append(val)
print("\nBefore Sorting: ")
print(array)
quick(0 , n)
print("\nAfter Sorting: ")
print(array)
这是我在Python中用于快速排序的代码。它在c ++中使用相同的范围,但它显示以下错误
**
回溯(最近一次呼叫最后一次):
请帮忙。谢谢。
答案 0 :(得分:1)
您的程序有许多与边界条件相关的错误。以下是基于您的代码的修改和工作解决方案。请注意,我已将swap更改为使用python首选方法。
def swap(p , q):
array[p],array[q] = array[q],array[p]
def partition(beg , end):
l = beg - 1
x = array[end]
for j in range(beg,end) :
if(array[j] <= x):
l += 1
swap(l , j)
swap(l+1, end)
return l+1
def quick(beg , end):
if(beg < end):
mid = partition(beg , end)
quick(beg , mid - 1)
quick(mid + 1 , end)
array = []
n=int(input("\nEnter the number of terms: "))
print("\nEnter the terms")
for i in range(0,n):
val = int(input())
array.append(val)
print("\nBefore Sorting: ")
print(array)
quick(0 , n-1)
print("\nAfter Sorting: ")
print(array)
答案 1 :(得分:0)
可能是因为partition
返回i
。这似乎是你接受原始输入的循环变量。因此,当您致电partition
以获取mid
功能中的quick
时,您会一遍又一遍地获得相同的值。在python中,循环变量在循环完成后继续存在。