Algoritmo de clasificación (2): explicación detallada de la clasificación de selección

Prólogo: Recientemente cambié de trabajo, y en las entrevistas con una fábrica un poco más grande se me preguntará sobre el conocimiento de algoritmos y estructuras de datos. Tengo tiempo para resumirlo yo mismo. Si el resumen no está en su lugar, espero que el jefe me corrija. .

Memoria episódica: el tipo de selección es bastante fácil de recordar. Es fácil de asociar con el nombre del tipo. "Selección" es la idea central de este tipo. ¿Cómo eliges cuando eliges? O el mecanismo de eliminación. es fácil de recordar: la mejor opción es elegir lo mejor de un montón de elementos desiguales del mismo tipo, como un par de manzanas, grandes y pequeñas, elegimos las grandes y comemos; la eliminación es elegir lo mejor de un puñado de desiguales. Se eliminan las más podridas. Por ejemplo, todavía quedan un puñado de manzanas. Esta vez, son manzanas con diferentes grados de pudrición o que están a punto de pudrirse. Tenemos que elegir las manzanas más podridas y descartarlos.

Implementación lógica: ¿Es el método de memoria anterior muy cercano a la vida, por lo que es fácil de recordar? La lógica es realmente muy simple, elige uno de los mejores o los peores a la vez, y colócalos en una cola ordenada por turnos.

Implementación de código:
clasificación hacia adelante:

def select_sort(my_list):
    n = len(my_list)
    for j in range(n-1):
        min_index = j
        for i in range(j+1, n):
            if my_list[min_index] < my_list[i]:
                min_index = i
        my_list[j], my_list[min_index] = my_list[min_index], my_list[j]
        print("第%s趟:" % (j + 1), my_list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    select_sort(my_list)


运行结果:
第1趟: [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]2趟: [0, 7, 2, 1, 5, 6, 8, 3, 9, 4]3趟: [0, 1, 7, 2, 5, 6, 8, 3, 9, 4]4趟: [0, 1, 2, 7, 5, 6, 8, 3, 9, 4]5趟: [0, 1, 2, 3, 7, 6, 8, 5, 9, 4]6趟: [0, 1, 2, 3, 4, 7, 8, 6, 9, 5]7趟: [0, 1, 2, 3, 4, 5, 8, 7, 9, 6]8趟: [0, 1, 2, 3, 4, 5, 6, 8, 9, 7]9趟: [0, 1, 2, 3, 4, 5, 6, 7, 9, 8]10趟: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

ordenación inversa:

def select_sort(my_list):
    n = len(my_list)
    for j in range(n-1):
        min_index = j
        for i in range(j+1, n):
            if my_list[min_index] > my_list[i]:
                min_index = i
        my_list[j], my_list[min_index] = my_list[min_index], my_list[j]
        print("第%s趟:" % (j + 1), my_list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    select_sort(my_list)
 
 
运行结果:
第1趟: [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]2趟: [9, 2, 0, 1, 5, 6, 7, 3, 8, 4]3趟: [9, 8, 0, 1, 2, 5, 6, 3, 7, 4]4趟: [9, 8, 7, 0, 1, 2, 5, 3, 6, 4]5趟: [9, 8, 7, 6, 0, 1, 2, 3, 5, 4]6趟: [9, 8, 7, 6, 5, 0, 1, 2, 3, 4]7趟: [9, 8, 7, 6, 5, 4, 0, 1, 2, 3]8趟: [9, 8, 7, 6, 5, 4, 3, 0, 1, 2]9趟: [9, 8, 7, 6, 5, 4, 3, 2, 0, 1]10趟: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Resumen de clasificación de selección:
No existe el mejor algoritmo, solo el algoritmo más adecuado.La calidad de un algoritmo generalmente está relacionada con la complejidad del tiempo, la complejidad del espacio y la estabilidad del algoritmo en el escenario de la aplicación.

Complejidad del tiempo: La medida de la complejidad del tiempo es la síntesis del tiempo que se tarda en comparar e intercambiar posiciones cada vez, es decir, la suma del tiempo que se tarda en completar la clasificación se denomina complejidad del tiempo, el estándar de cálculo es un ciclo ( no importa cuántas veces) Denotamos como n, si podemos denotar la diferencia en una estructura de árbol binario como log n, entonces se puede ver que la complejidad temporal de la clasificación de selección es O (n ^ 2)

Complejidad del espacio: la medida de la complejidad del espacio es si se aplica nuevo espacio de almacenamiento para la clasificación en todo el proceso de clasificación. Si lo hay, y cuanto más espacio se aplica, entonces consideramos que la complejidad del espacio del algoritmo es bastante compleja. , entonces la clasificación de burbujas no se aplica al espacio de almacenamiento en el proceso, por lo que creemos que la complejidad espacial de la clasificación de selección es pequeña (excepto por sí misma)

Estabilidad: es decir, en la secuencia original, list[i]=list[j], y list[i] está antes de list[j], y en la secuencia ordenada, list[i] todavía está antes de list[j], Entonces se dice que este algoritmo de clasificación es estable, de lo contrario se llama inestable, entonces pensamos que la clasificación de burbuja es estable, comparación de estabilidad: clasificación de montón, clasificación rápida, clasificación de Hill, clasificación de selección son algoritmos de clasificación inestables, clasificación de burbuja, clasificación de inserción, y merge sort son algoritmos de clasificación estables.

Supongo que te gusta

Origin blog.csdn.net/xiaoxin_OK/article/details/116137808
Recomendado
Clasificación