def bucketSort(A):
    n = len(A)
    B = [[] for i in range(n)]
    for i in range(0, n):
        ind = int(floor(n * A[i]))
        B[ind].append(A[i])
    for i in range(0, n):
        insertSort(B[i])
    res = []
    for i in range(0, n):
        res.extend(B[i])
    A[:] = res[:]
def __selectMidOfMid(seq):
    """获取中位数的中位数算法"""
    while len(seq) > 1:
        grpNum, lastNum = divmod(len(seq), 5)  # 分组,每组5个
        midArr = []  # 每组的中位数列表
        for i in range(0, grpNum):
            eachGroup = seq[i * 5:(i + 1) * 5]
            insertSort(eachGroup)
            midArr.append(eachGroup[2])
        if lastNum > 0:
            lastGroup = seq[grpNum * 5:grpNum * 5 + lastNum]
            insertSort(lastGroup)
            midArr.append(lastGroup[(lastNum - 1) // 2])
        seq = midArr
    return seq[0]
def __selectMidOfMid(seq):
    """获取中位数的中位数算法"""
    while len(seq) > 1:
        grpNum, lastNum = divmod(len(seq), 5)  # 分组,每组5个
        midArr = []  # 每组的中位数列表
        for i in range(0, grpNum):
            eachGroup = seq[i * 5: (i + 1) * 5]
            insertSort(eachGroup)
            midArr.append(eachGroup[2])
        if lastNum > 0:
            lastGroup = seq[grpNum * 5: grpNum * 5 + lastNum]
            insertSort(lastGroup)
            midArr.append(lastGroup[(lastNum - 1) // 2])
        seq = midArr
    return seq[0]