我正在尝试对一组int进行分区以完成快速排序。我的解决方案工作得很好,因为当一个元素与pivot相同时,我不明白如何在我的代码中考虑这个场景,到目前为止我看过或读过的每个教程都忽略了这个场景。我如何将其记入账户?
我的代码:
db = [55,5,23,1,412,1000,4,3,2,55]
def partition(db):
pivot = __median_of_three(db)
i = -1
j = 0
while j < len(db):
if db[j] < pivot:
i += 1
temp = db[i]
db[i] = db[j]
db[j] = temp
j += 1
print(db)
def __median_of_three(db):
values = [item for item in db if db.index(item) == 0 or db.index(item) == len(db)//2 or db.index(item) == len(db)-1]
if values[0] >= values[1] and values[0] <= values[2] or values[0] <= values[1] and values[0] >= values[2]:
return values[0]
elif values[1] >= values[0] and values[1] <= values[2] or values[1] <= values[0] and values[1] >= values[2]:
return values[1]
else:
return values[2]
partition(db)
当前输出:[5, 23, 1, 4, 3, 2, 55, 412, 1000, 55]
预期输出[5, 23, 1, 4, 3, 2, 55, 55, 412, 1000]