Ordenar burbuja de adelante hacia atrás / hacia adelante desde la realización

En primer lugar, ¿cuál es el ordenamiento de burbuja

Ordenar burbuja (burbuja Ordenar) también es un simple algoritmo de ordenación y intuitiva. Se visitó varias veces el número de columnas que ser resuelto, una comparación de los dos elementos, si los ponen en el orden equivocado conmutación. El número de visitas a la obra columna se repite hasta que ya no hay necesidad de intercambio, es decir el número de columnas ya ordenados completó. El origen del nombre del algoritmo se debe a que los elementos más pequeños lentamente a través del intercambio de "flotar" a la parte superior de las columnas.

En segundo lugar, la presentación de mapa móvil

* Móvil figura de tutorial principiante

En tercer lugar, la puesta en práctica

Comparación de elementos adyacentes. Si el primero es mayor que el segundo, los dos de ellos intercambiaron.

Hacer el mismo trabajo para cada par de elementos adyacentes, desde el principio hasta el final de la primera a la última pareja. Una vez hecho esto, el último elemento es el número más grande.

Repita estos pasos para todos los elementos, excepto el último.

Continúa repetir los pasos anteriores para cada vez menos y menos elementos, un par de números hasta que no hay necesidad de comparar.

En cuarto lugar, los parámetros de rendimiento en una especie de burbuja

1, tiempo de complejidad

Lo mejor: la ( norte ) O (n) (Ordenadas
media: la ( norte 2 ) O (n ^ 2)
Lo peor: la ( norte 2 ) O (n ^ 2)

2, la complejidad del espacio

la ( 1 ) O (1)

3, es estable

Estable - comparar y procedimiento de canje, la determinación del tiempo para los mismos elementos, no intercambiado

4, cualquier tipo adecuado de almacenamiento

almacenamiento secuencial y de la cadena de almacenamiento

En quinto lugar, la aplicación del código

c ++:

1, j=n-1de atrás hacia delante

* Se utiliza aquí paraflag

También hay una optimización algoritmo de ordenamiento de burbuja es la creación de una bandera, cuando el elemento no se produce en la secuencia de recorrido de viaje de intercambio, a continuación, probar que la secuencia se ha ordenado. Pero esta mejora para mejorar el rendimiento y no tiene mucho efecto.

void BubbleSort(ElemType A[],int n ){
    for(int i = 0; i<n-1; i++){		// n-1次冒泡
        bool flag = false;
        for(int j = n - 1; j>i; j--)	// 从后向前
            if(A[j-1] > A[j]){	//逆序
                swap(A[j-1],A[j]);
                flag = true;		// 只有交换了flag才为true
            }
        if(flag == false)		//冒泡完成
            return;
    }
}

2, j=0frente a la parte posterior

Esto es fácil de recordar, la cantidad de uno a convertirse en un poco más

void BubbleSort(ElemType A[],int n ){
    for(int i = 0; i<n-1; i++){		// n-1次冒泡
        for(int j = 0; j< n-1-i; j++)	// 从前向后
            if(A[j] > A[j+1]){	//逆序
                swap(A[j],A[j+1]);
            }
    }
}

Ejemplos de aplicación:

/*
 * @Descripttion: 
 * @version: 
 * @Author: edisonhuang
 * @Date: 2020-03-09 16:20:29
 * @LastEditors: edisonhuang
 * @LastEditTime: 2020-03-09 16:31:07
 */
#include <iostream>
void BubbleSort1(int A[], int n);
void BubbleSort2(int A[], int n);
void Print(int A[],int n);
using namespace std;

int main()
{
    int arr1[] = {13, 14, 8, 100, 25, 75, 9, 64, 12};
    int len1 = (int) sizeof(arr1) / sizeof(*arr1);
    Print(arr1,len1);
    BubbleSort1(arr1,len1);
    Print(arr1,len1);

    int arr2[] = {13, 14, 8, 100, 25, 75, 9, 64, 12};
    int len2 = (int) sizeof(arr1) / sizeof(*arr1);
    Print(arr2,len2);
    BubbleSort2(arr2,len2);
    Print(arr2,len2);

    return 0;
}

void BubbleSort1(int A[], int n){
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n-1-i; j++)
        {
            if (A[j] > A[j+1])
            {
                swap(A[j],A[j+1]);
            }   
        }
    }
}
void BubbleSort2(int A[], int n){
    for (int i = 0; i <  n - 1 ; i++)
    {
        for (int j = n - 1; j > i; j--)
        {
            if (A[j-1] > A[j])
            {
                swap(A[j-1], A[j]);
            }
        }
    }
    
    
}
void Print(int A[],int n ){
    for (int i = 0; i < n; i++)
    {
        cout << A[i] << " ";
    }
    cout << endl;
}
Publicado 35 artículos originales · ganado elogios 1 · vistas 1842

Supongo que te gusta

Origin blog.csdn.net/qq_40672635/article/details/104755589
Recomendado
Clasificación