En el tercer día del algoritmo de actualización pila de clasificación y un cubo especie

Hoy participó en la prueba escrita, emmmmmmm, continuó esfuerzos duros.

Buen hábito: claridad de pensamiento puede hacer que el código de creación rápida de prototipos. comentario apropiado al código de marca poseen más legible. Preparar las herramientas adecuadas para hacer un gráfico para explicar o figura de acción.

1, cubo especie

"" "
Ideas: Esta es una matriz de enteros, para encontrar el valor máximo, el establecimiento (max + 1) -ésimo cubo vacío para empezar a ejecutar la matriz original bañera correspondiente (índice = num) se retiró a continuación de la cubeta.
" " "

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

"" "
Las ideas: en primer lugar comprender lo que es la raíz grande montón, una gran pila proceso de raíz de la construcción, el proceso de reparación un gran montón de raíz
'" "

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, cubo especie ampliar

A Título: Dada una matriz de enteros, si es necesario, después de la clasificación, la diferencia entre dos número adyacente máximo de tiempo requerido complejidad O (N), y la solicitud no puede ser comparado con un no basado en especie.
"" "
Ideas: El max y min de descarga cubo vacío, el cubo que puede incluir la determinación de si el valor booleano está vacío, poner al mínimo, máximo, para empezar a ejecutar en la matriz, la actualización de los parámetros dentro de la cuba
" ""

# 待后续补充

Tema dos: encontrar la mediana de una matriz dada.
"" "
Idea: un gran montón de raíz, un poco de raíz montón, para mantener un
equilibrio! " ""

# 待后续补充

Supongo que te gusta

Origin www.cnblogs.com/burry/p/12664076.html
Recomendado
Clasificación