我想用python实现给定数组的三路分区。数组的三路分区
我的看法:
def partition3(alist, lower, heigher, size):
start = 0
end = size-1
for i in range(size):
if alist[i] < lower:
alist[i], alist[start] = alist[start], alist[i]
start = start+1
elif alist[i] > heigher:
alist[i], alist[end] = alist[end],alist[i]
end = end - 1
else:
pass
return alist
def sort(alist, low, high):
return partition3(alist, low, high, len(alist))
print sort([1, 14, 5, 20, 4, 2, 54, 20, 87, 98, 3, 1, 32], 10, 20)
预期的结果应该是, 1)所有元素都小于lowRange是第一位的。 2)接下来是范围从低到高的所有元素。 3)所有大于highRange的元素最后出现。
这必须在同一个数组中完成,不应该有三个数组。输入: 列表,lowRange和highRange。 但我得到,
[1, 5, 4, 2, 14, 20, 32, 54, 87, 98, 3, 1, 20]
需要帮助的,我是缺少在这里的事情。在此先感谢
这与排序列表有何不同?你是否期望也有lowRange> highRange? –
如果你想分区,有3个列表是不是更容易? – PinkFluffyUnicorn
尝试添加一些打印语句来查看会发生什么。 – PinkFluffyUnicorn