可以在不拆分成单独列表的情况下进行快速排序吗?

时间:2015-09-04 06:27:35

标签: sorting

在许多快速排序算法中,编程涉及将每个阵列中的元素分成三组:(lesspivotmore),有时将组重新组合在一起。如果我不想使用它会怎么样?是否有一种更简单的方法来手动对快速排序列表进行排序?

基本上,我打算将数组保持为一个,并根据分区交换所有元素(例如,给定列表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]

2 个答案:

答案 0 :(得分:2)

您可以纯粹通过交换列表中项目的位置来实现快速排序,而不是实际创建新列表。

但除非这是某种家庭作业,最好的选择通常是使用python的内置sort()函数,该函数会在适当的时候自动使用quicksort。

答案 1 :(得分:0)

这里有些不对劲。您需要有两个定义,一个用于分区,另一个用于快速排序过程本身。然后快速排序需要有某种循环,以便它继续将分区应用于数组的子数组。去检查维基百科article以了解其工作原理。