Tri par godets (version simplifiée) et tri par bulles

contenu

​​​​​​Tri par seau

Tri à bulles

1. Tri au godet (version simplifiée)

Le soi-disant tri des seaux signifie que la séquence de seaux est organisée, il suffit de mettre le numéro dans la séquence du seau correspondant et d'enregistrer combien de fois le numéro dans le seau apparaît.

Comptons! 3 4 6 8 5 2 9 7 1

Le nombre de buckets dont nous avons besoin est composé du nombre maximum + 1, il occupe donc une grande quantité de mémoire, mais la complexité temporelle est faible. Utilisez un tableau pour stocker, arr[10] , l' indice du tableau commence à 0 . Initialisez d'abord les buckets à 0, indiquant qu'aucun numéro n'est apparu.

Parlons d'abord de l'initialisation d'un tableau à une dimension

Il s'agit d'une initialisation

	int arr[10] = { 0 };

De cette façon, bien que le premier élément soit initialisé, les éléments suivants sont tous par défaut à 0

Elle peut également être initialisée comme ceci : la déclaration initiale suivante n'est pas initialisée et l'affectation suivante est effectuée.

	int arr[10];
	int n = 0;
	for (n = 0; n < 10; n++)
	{
		arr[n] = 0;
	}

Dans l'initialisation habituelle, j'aime le premier.

Passons au numéro précédent 3 4 6 8 5 2 9 7 1

Et stockez le nombre dans le seau correspondant, et enregistrez combien de fois il apparaît

	for (n = 0; n < 9; n++)
	{
		scanf("%d", &s);
		arr[s]++;
	}

Ensuite, nous pouvons le sortir ( de petit à grand )

	for (n = 0; n < 10; n++)
	{
		if (arr[n] != 0)
			printf("%d ", n);
	}

code complet

#include <stdio.h>
#define MAX 10
int main()
{
	int arr[MAX]={0};
	int n = 0,s=0;
	for (n = 0; n < MAX-1; n++)
	{
		scanf("%d", &s);
		arr[s]++;
	}
	for (n = 0; n < MAX; n++)
	{
		if (arr[n] != 0)
			printf("%d ", n);
	}
	return 0;
}

2. Tri à bulles (idée de base pour comparer le nombre précédent avec le deuxième nombre)

" Bubbling " est comme l'image ci-dessus, de bas en haut , le type de bulle  dont nous parlons ici est similaire à ceci

Toujours une telle séquence non ordonnée   3 4 6 8 5 2 9 7 1, nous voulons qu'elle devienne 1 2 3 4 5 6 7 8 9

Supposons qu'il y ait une flèche J pointant vers un nombre

1) Tout d'abord, J pointe vers le bas 3, qui est comparé au nombre pointé par J + 1 (c'est-à-dire le nombre suivant).S'il est plus grand que lui, ils échangeront, sinon ils n'échangeront pas. Puis recule d'un pas (j++), et ainsi de suite. Comparez jusqu'au dernier chiffre. Cette fois, le plus grand nombre est trouvé.

		for (j = 0; j < 9 - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}

2) 3 4 6 5 2 8 7 1 9 , c'est la disposition de l'étape précédente, on constate que le dernier chiffre a été disposé (on comprend que la plus grosse bulle est sortie de l'eau), et l'ordre suivant consiste à organiser les numéros déjà arrangés Retirez les bons numéros (le dernier numéro de chaque rangée) et organisez les numéros suivants selon (1) jusqu'à ce que le tri soit terminé.

Remarquer:

1. Le tri total est maintenant le nombre de nombres triés moins 1

2. Décrémenter de 1 à chaque tri

code complet

int main()
{
	int arr[9] = { 3 ,4, 6, 8, 5, 2, 9 ,7, 1 };
	int i, j;
	for (i = 0; i < 9 - 1; i++)
	{
		for (j = 0; j < 9 - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int temp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = temp;
			}
		}
	}
	return 0;
}

Les amis intéressés peuvent optimiser l'algorithme de tri à bulles ci-dessus.

Ce qui suit est un groupe qui pose des questions sur la programmation. Ceux qui ont des questions peuvent rejoindre le groupe. Il n'y a pas de publicité ! ! !

S'il y a un problème avec mon article, vous pouvez commenter dans la zone de commentaire ci-dessous, merci!

Je suppose que tu aimes

Origine blog.csdn.net/m0_60598323/article/details/122648381
conseillé
Classement