Análisis de algoritmo de clasificación rápida

Análisis de algoritmo de clasificación rápida

inserte la descripción de la imagen aquí

Ordenación rápida

La clasificación rápida es un algoritmo clásico de divide y vencerás, que divide recursivamente la matriz que se va a clasificar en sub-matrices más pequeñas y luego logra el propósito de clasificar a través de la selección de elementos de referencia y el intercambio de elementos.

La idea central de la clasificación rápida es seleccionar el elemento de referencia y comparar otros elementos con el elemento de referencia, colocar los más pequeños que el elemento de referencia a la izquierda y los más grandes que el elemento de referencia a la derecha, de modo que el la posición de los elementos de referencia se vuelve ordenada. Luego llame recursivamente a la ordenación rápida en las sub-matrices en los lados izquierdo y derecho, para realizar la ordenación de toda la matriz.

Los pasos específicos son los siguientes:

  1. Seleccionar elemento de referencia: seleccione un elemento de la matriz para ordenarlo como referencia. La elección de un elemento fiduciario apropiado puede afectar la eficacia de la ordenación rápida.
  2. Operación de división: divida la matriz en dos partes, coloque el elemento menor o igual que el elemento de referencia a la izquierda y coloque el elemento mayor o igual que el elemento de referencia a la derecha. Este paso se puede lograr utilizando el método de doble puntero o el método de excavación.
  3. Ordenación recursiva: llama recursivamente a la ordenación rápida para los subconjuntos izquierdo y derecho divididos.
  4. Fusionar resultado: fusione el subconjunto izquierdo, el elemento de referencia y el subconjunto derecho para obtener el resultado de clasificación final.

La clave de la ordenación rápida es la operación de división, que coloca el elemento de referencia en la posición correcta intercambiando las posiciones de los elementos varias veces. A través de cada ronda de operación de división, se ha determinado la posición del elemento de referencia, los elementos de la izquierda son todos menores o iguales que el punto de referencia, y los elementos de la derecha son todos mayores o iguales que el punto de referencia. A continuación, ordene recursivamente los subconjuntos izquierdo y derecho hasta que la longitud de los subconjuntos sea 1 o 0 y finalice la recursión.

La ventaja de quicksort es que su complejidad de tiempo promedio es O(nlogn), y tiene las características de clasificación en el lugar (in-place) sin requerir espacio adicional. Sin embargo, la complejidad del tiempo en el peor de los casos es O (n ^ 2).Cuando la matriz que se ordenará ya está ordenada o casi ordenada, la eficiencia de la clasificación rápida disminuirá. Para evitar esta situación, el elemento de referencia se puede seleccionar aleatoriamente o se puede usar el medio de tres números para seleccionar el elemento de referencia para aumentar la estabilidad y el rendimiento del algoritmo.

En resumen, la clasificación rápida es un algoritmo de clasificación eficiente, que se basa en la idea de divide y vencerás, y realiza la clasificación de matrices seleccionando elementos de referencia y operaciones de división.

ejemplo de código

A continuación, tomaré el código de Python como ejemplo para analizar en detalle varios algoritmos de clasificación comunes. Puede probar el rendimiento de los siguientes tipos por separado.

  1. Bubble Sort:
    Bubble sort es un algoritmo de clasificación simple e intuitivo que atraviesa la matriz que se ordenará varias veces, comparando dos elementos adyacentes cada vez e intercambiando posiciones hasta que toda la matriz esté en orden.
def bubble_sort(arr):
    n = len(arr)
    for i in range(n-1):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr
  1. Clasificación por inserción (Insertion Sort):
    la clasificación por inserción comienza desde el segundo elemento de la matriz e inserta los siguientes elementos en la parte previamente clasificada uno por uno hasta que toda la matriz esté en orden.
def insertion_sort(arr):
    n = len(arr)
    for i in range(1, n):
        key = arr[i]
        j = i - 1
        while j >= 0 and arr[j] > key:
            arr[j+1] = arr[j]
            j -= 1
        arr[j+1] = key
    return arr
  1. Ordenación por selección: la
    ordenación por selección encuentra el elemento más pequeño en la parte no ordenada cada vez y lo coloca al final de la parte ordenada, repitiendo el proceso hasta que toda la matriz esté en orden.
def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr
  1. Ordenación rápida (Quick Sort): la
    ordenación rápida utiliza el método de dividir y conquistar para dividir rápidamente la matriz en dos subarreglos, uno más pequeño que el elemento de referencia y otro más grande que el elemento de referencia, y luego ordena recursivamente los subarreglos.
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    less = [x for x in arr if x < pivot]
    equal = [x for x in arr if x == pivot]
    greater = [x for x in arr if x > pivot]
    return quick_sort(less) + equal + quick_sort(greater)

Estas son las ideas básicas y códigos de muestra para varios algoritmos de clasificación comunes. Vale la pena señalar que los diferentes algoritmos de clasificación tienen diferentes características de complejidad de tiempo y complejidad espacial, por lo que en aplicaciones prácticas, es necesario elegir el algoritmo de clasificación apropiado de acuerdo con la situación específica.

Supongo que te gusta

Origin blog.csdn.net/weixin_53742691/article/details/131713419
Recomendado
Clasificación