快速分区步骤(python)

时间:2016-10-09 12:19:18

标签: python quicksort partitioning

我正在尝试对一组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]

0 个答案:

没有答案