我正在尝试在 Python 中实现快速排序,但输出列表要么跳过元素,要么重复它们
I am trying to implement quicksort in Python but the output list is either skipping elements or repeating them
我对编程还很陌生,想在看完书中给出的图表后实现 quicksort
。但是,我没有得到所需的排序列表,因为某些元素未添加或重复。我怀疑问题出在我如何使用递归对列表进行排序。
array = [52, 5, 45, 2, 78, 1, 9, 57, 3]
global less_pivot_list
global greater_pivot_list
def quicksort(array):
global less_pivot_list
global greater_pivot_list
if len(array) < 2:
return array
elif len(array) == 2:
if array[0] > array[1]:
temp = array[0]
array[0] = array[1]
array[1] = temp
return array
else:
pivot_index = 0
pivot = array[pivot_index]
list_pivot = [pivot]
less_pivot_list = [item for item in array if pivot > item]
greater_pivot_list = [item for item in array if pivot < item]
return quicksort(less_pivot_list) + list_pivot + quicksort(greater_pivot_list)
output = quicksort(array)
print(output)
这是输出:[1, 2, 3, 5, 3, 52, 3]
移除函数内的全局声明
array= [52,5,45,2,78,1,9,57,3]
less_pivot_list = []
greater_pivot_list = []
def quicksort(array):
if len(array)<2:
return array
elif len(array)==2:
if array[0] > array[1]:
temp = array[0]
array[0] = array[1]
array[1]= temp
return array
else:
pivot_index=0
pivot=array[pivot_index]
list_pivot=[pivot]
less_pivot_list = [item for item in array if pivot > item]
greater_pivot_list = [item for item in array if pivot < item]
return quicksort(less_pivot_list) +list_pivot+ quicksort(greater_pivot_list)
output=quicksort(array)
print(output)
这会生成正确排序的输出。
我对编程还很陌生,想在看完书中给出的图表后实现 quicksort
。但是,我没有得到所需的排序列表,因为某些元素未添加或重复。我怀疑问题出在我如何使用递归对列表进行排序。
array = [52, 5, 45, 2, 78, 1, 9, 57, 3]
global less_pivot_list
global greater_pivot_list
def quicksort(array):
global less_pivot_list
global greater_pivot_list
if len(array) < 2:
return array
elif len(array) == 2:
if array[0] > array[1]:
temp = array[0]
array[0] = array[1]
array[1] = temp
return array
else:
pivot_index = 0
pivot = array[pivot_index]
list_pivot = [pivot]
less_pivot_list = [item for item in array if pivot > item]
greater_pivot_list = [item for item in array if pivot < item]
return quicksort(less_pivot_list) + list_pivot + quicksort(greater_pivot_list)
output = quicksort(array)
print(output)
这是输出:[1, 2, 3, 5, 3, 52, 3]
移除函数内的全局声明
array= [52,5,45,2,78,1,9,57,3]
less_pivot_list = []
greater_pivot_list = []
def quicksort(array):
if len(array)<2:
return array
elif len(array)==2:
if array[0] > array[1]:
temp = array[0]
array[0] = array[1]
array[1]= temp
return array
else:
pivot_index=0
pivot=array[pivot_index]
list_pivot=[pivot]
less_pivot_list = [item for item in array if pivot > item]
greater_pivot_list = [item for item in array if pivot < item]
return quicksort(less_pivot_list) +list_pivot+ quicksort(greater_pivot_list)
output=quicksort(array)
print(output)
这会生成正确排序的输出。