Le troisième jour du type de recyclage algorithme de tas et trier seau

A participé aujourd'hui à l'épreuve écrite, EMMMMMMM, a poursuivi ses efforts durs.

Bonne habitude: la pensée claire peut rendre le code prototypage rapide. commentons au code de rendre plus lisibles possèdent. Préparer les bons outils pour faire un tableau pour expliquer ou de la figure d'action.

1, sorte de seau

« » «
Idées: Ceci est un tableau d'entiers, pour trouver la valeur maximale, réglage (max + 1) ième seau vide pour commencer à courir le tableau original baignoire correspondant (indice = num) a ensuite été retiré du seau.
» " "

def bucket_sort_func(arr):
    if len(arr) < 2:
        return arr
    max_arr = max(arr)
    # 放空桶
    bucket = [0 for _ in range(max_arr+1)]
    for num in arr:
        bucket[num] += 1
    sort_arr = []
    for i in range(len(bucket)):
        if bucket[i] != 0:
            for ele in range(bucket[i]):
                sort_arr.append(i)
    return sort_arr

# 放回原数组
def bucket_sort(arr):
    res = bucket_sort_func(arr)
    for i in range(len(arr)):
        arr[i] = res[i]

2, heapsort

« » « Des
idées: tout d' abord comprendre ce qui est la grande racine du tas, un processus racine gros tas de construction, le processus de réparation d' un grand tas racine
« »"

def heap_sort(arr):
    if len(arr) < 2:
        return arr
    for i in range(len(arr)):
        heap_insert(arr, i)
    size = len(arr)
    size -= 1
    arr[0], arr[size] = arr[size], arr[0]

    while size > 0:
        heapify(arr, 0, size)
        size -= 1
        arr[0], arr[size] = arr[size], arr[0]


def heap_insert(arr, index):
    # 构造大根堆
    # 出现一个BUG,最后一个数没有排好,问题见以下描述。必须要int,整除不可以!
    # index = 0
    # a = int((index - 1) / 2)
    # b = (index - 1) // 2
    # print(a, b)   打印结果 a=0,b=-1
    # while arr[index] > arr[((index-1)//2)]:
    #     arr[index], arr[((index-1)//2)] = arr[((index-1)//2)], arr[index]
    #     index = ((index-1)//2)
    while arr[index] > arr[int((index-1)/2)]:
        arr[index], arr[int((index-1)/2)] = arr[int((index-1)/2)], arr[index]
        index = int((index-1)/2)


def heapify(arr, index, size):
    # 调节大根堆
    left = index*2 + 1
    while left < size:
        if (left+1) < size and arr[left+1] > arr[left]:
            largest = left + 1
        else:
            largest = left
        if arr[largest] > arr[index]:
            largest = largest
        else:
            largest = index
        if largest == index:
            break
        arr[largest], arr[index] = arr[index], arr[largest]
        index = largest
        left = index*2 + 1

3, seau étendre tri

A Titre: Étant donné un tableau d'entiers, le cas échéant, après le tri, la différence entre deux nombres maximum de O adjacent de la complexité du temps nécessaire (N), et la demande ne peut pas être comparée à une base de non-tri.
« » «
Ideas: Le max et min décharge seau vide, le godet qui peut inclure de déterminer si la valeur booléenne est vide, mettre au minimum, maximum, à commencer à courir dans la matrice, la mise à jour des paramètres à l' intérieur de la cuve
» « »

# 待后续补充

Sujet deux: trouver la médiane d'un tableau donné.
« » «
Idée: un grand tas de racines, un peu de racine tas, de maintenir un
équilibre! » « »

# 待后续补充

Je suppose que tu aimes

Origine www.cnblogs.com/burry/p/12664076.html
conseillé
Classement