11. Ordenar-burbujear, insertar, seleccionar

 

La ordenación por inserción y la ordenación por burbujas tienen la misma complejidad de tiempo, ambas son O (n2), preferimos utilizar el algoritmo de ordenación por inserción.

Motivo: xxx

 

Cómo analizar un algoritmo de clasificación:

1 eficiencia de ejecución

(1) Complejidad de tiempo del mejor caso, peor caso, caso promedio

(2) Coeficiente, constante, bajo orden de complejidad temporal

Para datos a pequeña escala, la misma comparación de orden, coeficientes y constantes también son importantes

(3) Tiempos de comparación y tiempos de intercambio (o movimiento)

2. Consumo de memoria

Ordenado en su lugar, la complejidad del espacio es o (1).

3. Estabilidad

Si hay elementos con el mismo valor en la secuencia a clasificar, después de la clasificación, la secuencia original entre los elementos iguales permanece sin cambios.

 

Clasificación de burbujas (BubbleSort)

Compare dos elementos adyacentes para ver si satisfacen el intercambio. Un burbujeo moverá al menos un elemento a donde debería estar, y se repetirá n veces para completar la clasificación de n datos.

 

func BubbleSort(arry []int ) []int{
    if len(arry) <= 1{
    return arry
    }

    for i:= 0; i < len(arry)-1; i++{//趟数
        for j := 0; j < len(arry) - 1 -i; j ++{//每趟比较的次数
            if arry[j] > arry[j+1]{
                arry [j], arry[j+1] = arry[j+1], arry[j]
            }
        } 
    }
    return arry
}

La clasificación de burbujas es una clasificación in situ, una clasificación estable, la complejidad del tiempo es mejor O (n), peor O (n2)

 

Insertar clasificación (InsertSort)

Inserte una nueva pieza de datos en una matriz ordenada, insértela donde debería estar y mantenga la matriz en orden.

 

Al agregar datos a una colección ordenada dinámicamente, podemos mantener los datos en la colección siempre ordenados de esta manera.

La matriz se divide en intervalos ordenados e intervalos sin clasificar.El intervalo ordenado inicial tiene solo un elemento, que es el primer elemento de la matriz. La idea central del algoritmo de inserción es tomar los elementos en el intervalo no ordenado, encontrar una posición de inserción adecuada en el intervalo ordenado e insertarlo, y asegurarse de que los datos en el intervalo ordenado estén siempre en orden . Este proceso se repite hasta que los elementos en el intervalo no ordenado estén vacíos y el algoritmo finalice.

La ordenación por inserción es la ordenación en el lugar, la ordenación por estabilidad, la complejidad temporal es mejor O (n), peor O (n2)

func InsertSort(arr []int) {
	for i := 1; i < len(arr); i++ {//第一个元素不需要排
		for j := i; j > 0; j-- {//有序集合的元素个数j
			if arr[j] < arr[j-1] {
				arr[j-1], arr[j] = arr[j], arr[j-1]
			}
		}
	}

	fmt.Println(arr)
}

Selección de selección (SelectionSort)

De manera similar a la ordenación por inserción, los datos más recientes se toman del intervalo sin clasificar y se insertan en el intervalo ordenado.

Complejidad de tiempo O (n2)

Es un tipo inestable: cada vez que se encuentra el valor mínimo de los elementos restantes, la posición se intercambia con el elemento anterior, lo que destruye la estabilidad.

 

127 artículos originales publicados · Me gusta 24 · Visitas 130,000+

Supongo que te gusta

Origin blog.csdn.net/Linzhongyilisha/article/details/100106913
Recomendado
Clasificación