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! " ""
# 待后续补充