在许多快速排序算法中,编程涉及将每个阵列中的元素分成三组:(less
,pivot
,more
),有时将组重新组合在一起。如果我不想使用它会怎么样?是否有一种更简单的方法来手动对快速排序列表进行排序?
基本上,我打算将数组保持为一个,并根据分区交换所有元素(例如,给定列表x
和枢轴r
,我们可以有参考列表[0:r]
和[r:len(x)]
。但是,随着排序的继续,如何继续引用每个较小的"子阵列"?
所以这是我的代码,但我不确定如何从这里继续:
x = [4,7,4,2,4,6,5]
#r is pivot POSITION
r = len(x)-1
i = -1
for a in range(0,r+1):
if x[a] <= x[r]:
i+=1
x[i], x[a] = x[a], x[i]
答案 0 :(得分:2)
您可以纯粹通过交换列表中项目的位置来实现快速排序,而不是实际创建新列表。
但除非这是某种家庭作业,最好的选择通常是使用python的内置sort()函数,该函数会在适当的时候自动使用quicksort。
答案 1 :(得分:0)
这里有些不对劲。您需要有两个定义,一个用于分区,另一个用于快速排序过程本身。然后快速排序需要有某种循环,以便它继续将分区应用于数组的子数组。去检查维基百科article以了解其工作原理。