我想用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