11. Tri-bouillonnement, insertion, sélection

 

La complexité temporelle du tri par insertion et du tri par bulles est la même, les deux sont O (n2).

Raison: xxx

 

Comment analyser un algorithme de tri:

1 efficacité d'exécution

(1) Complexité temporelle du meilleur cas, du pire cas, du cas moyen

(2) Coefficient, constante, faible complexité temporelle

Pour les données à petite échelle, la même comparaison d'ordre, les coefficients et les constantes sont également importants

(3) Temps de comparaison et temps d'échange (ou de mouvement)

2. Consommation de mémoire

Triée en place, la complexité de l'espace est o (1).

3. Stabilité

S'il y a des éléments avec la même valeur dans la séquence à trier, après le tri, la séquence d'origine entre les éléments égaux reste inchangée.

 

Tri des bulles (BubbleSort)

Comparez deux éléments adjacents pour voir s'ils satisfont l'échange. Un bouillonnement déplacera au moins un élément là où il devrait être et répétera n fois pour terminer le tri de n données.

 

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
}

Le tri à bulles est un tri in situ, un tri stable, la complexité temporelle est la meilleure O (n), la pire O (n2)

 

Insérer un tri (InsertSort)

Insérez un nouveau morceau de données dans un tableau ordonné, insérez-le où il devrait être et gardez le tableau dans l'ordre.

 

En ajoutant dynamiquement des données à une collection ordonnée, nous pouvons garder les données de la collection toujours ordonnées de cette façon.

Le tableau est divisé en intervalles triés et en intervalles non triés . L'intervalle trié initial n'a qu'un seul élément, qui est le premier élément du tableau. L'idée centrale de l'algorithme d'insertion est de prendre les éléments dans l'intervalle non trié, de trouver une position d'insertion appropriée dans l'intervalle trié et de l'insérer, et de s'assurer que les données dans l'intervalle trié sont toujours en ordre . Ce processus est répété jusqu'à ce que les éléments de l'intervalle non trié soient vides et que l'algorithme se termine.

Le tri par insertion est un tri sur place, un tri de stabilité, la complexité temporelle est la meilleure O (n), la pire 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)
}

Tri de sélection (SelectionSort)

Comme pour le tri par insertion, les dernières données sont extraites de l'intervalle non trié et insérées dans l'intervalle trié.

Complexité temporelle O (n2)

Il s'agit d'une sorte instable: chaque fois que la valeur minimale des éléments restants est trouvée, la position est échangée avec l'élément précédent, ce qui détruit la stabilité.

 

A publié 127 articles originaux · Aime 24 · Visites 130 000+

Je suppose que tu aimes

Origine blog.csdn.net/Linzhongyilisha/article/details/100106913
conseillé
Classement