/ / Le programme de tri à bulles ne produit pas le résultat - c ++, tableaux, tri, tri à bulles

Le programme de tri à bulles ne produit pas le résultat - c ++, tableaux, tri, tri à bulles

Je suis dans un cours de mathématiques discret et l'un des problèmes matériels est de mettre en place un type de bulle. C’est là ma tentative vaine, car elle n’affiche pas la solution. Merci de nous conseiller. Merci.

#include <iostream>
#include <cstdlib>
using namespace std;
void BubbleSort();
int array1[100] = {0};
int k;
int main()
{
cout << "Enter your numbers and when you are done, enter 0000:n";
int x = 0;
int i;
while (i != 0000)
{
cin >> i;
array1[x] = i;
x++;
k = x;
}
BubbleSort();
system("pause");
return 0;

}

void BubbleSort(){
int temp;
for( int i = 0; i < k; i++ ){
if ( array1[i] > array1[i+1]){
temp = array1[i+1];
array1[i+1] = array1[i];
array1[i] = temp;
}
}
int x = 0;
while (x <= k)
{
cout << array1[x] << "n";
x++;
}
}

S'il vous plaît, utilisez uniquement des techniques de programmation de base car il s'agit de mon premier cours de programmation. Je vous remercie. Edit: fixe l'opérateur relationnel. Mais maintenant, je reçois des résultats incorrects.

Réponses:

1 pour la réponse № 1

Le problème principal est ici:

while (x >! k)

À la première itération, la condition vérifie si (0 > !k), et k n'est pas 0, donc !k est 0, la condition est fausse et la boucle ne s'exécute jamais. Essayez d'utiliser:

for (int x = 0; x < k; x++)
cout << array1[x] << "n";

Vous avez également un problème lors de la phase de tri de votre type de bulle; il suffit de parcourir les données une seule fois, ce qui n’est pas suffisant pour les trier, en général.

Enfin, quelques problèmes de conception.

  1. Vous devez avoir une fonction pour trier les données et une fonction distincte pour l’imprimer. Ne combinez pas les deux fonctions comme vous l’avez fait ici.
  2. Évitez les variables globales. Transmettez le tableau et sa longueur opérationnelle à la fonction de tri et à la fonction d'impression, le cas échéant.

2 pour la réponse № 2
while (x >! k)

Cela ne "fait pas ce que vous pensez. Si vous voulez quelque chose qui dit" en x n'est pas plus grand que k", tu veux <=. Depuis array1[k] isn "t un des éléments que vous avez triés, cependant, vous voulez probablement <.

while (x < k)

Notez que for existe pour des boucles comme celles-ci:

for (int x = 0; x < k; x++) {
cout << array1[x] << "n";
}

Quant au nouveau bogue, vous ne faites qu’une série de bouillonnements dans votre type de bulles. Vous avez besoin d’une autre for boucle. Également, i n'est jamais initialisé dans main, et i != 0000 ne va pas "vérifier si l'utilisateur a entré 4 zéros. Il" vérifiera seulement si l'entrée de l'utilisateur était égale au nombre 0.