Tri à bulles pour Tableau 2D en C++
Je suis en train de trier tous les 2D des éléments d'un tableau en c++ à l'aide de tri à bulles, mais je ne peux pas le comprendre.
#include <iostream>
#include <stdio.h>
using namespace std;
int main (){
int x[4][4],i,k,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
cin>>x[i][j];
cout<<"\n\n";
for(i=0;i<4;i++)
for(j=0;j<3;j++)
for(k=j+1;k<4;k++)
if(x[i][j]>x[i][k])
{
int temp = x[i][j];
x[i][j] = x[i][k];
x[i][k] = temp;
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
cout<<x[i][j]<<"\t";
cout<<"\n\n";
}
cout<<endl;
return 0;
}
La chose est, je ne sais pas si ces éléments sont triés correctement. Je pense que je devrais juste mettre un autre pour la boucle quelque part, mais je ne sais pas où.
Aussi, est-il possible de minimiser le code ci-dessus pour utiliser seulement 2 boucles for? J'ai pensé que je pouvais mais je n'étais pas sûr de savoir exactement comment je le ferais parce que les éléments de " j " doit être inférieur à 1.
Mon principal problème ici est bien juste le tri de tous les éléments.
- Merci de voir meta.stackexchange.com/questions/40164/....
Vous devez vous connecter pour publier un commentaire.
Vous pouvez regarder ci-dessous qui peut être surprenant, bu fonctionne très bien, mais avec qsort au lieu de tri à bulles...
Il y a un truc ici, en tant que nous sommes juste de tri d'un tableau à une dimension avec qsort. Le truc, c'est possible parce que la disposition de la mémoire de x[4][4] est de 16 nombres entiers consécutifs, de sorte que vous pouvez accéder comme si il a été déclaré comme x[16], et vous pouvez utiliser ce fait pour mettre en œuvre un traditionnel tri à bulles, juste casting int y = (int)x; et puis le tri des y de (0..15), car il s'agissait d'un tableau multidimensionnel.
Cependant, je ne recommanderais pas ceci si vous êtes un novice à intermédiaire programmeur en C/C++, comme vous l'avez probablement l'obtenir horriblement mal -- aussi, vous ne sera probablement pas obtenir une quelconque des gains de performance en agissant de la sorte, comme l'optimiseur est assez bonne et dérouler les boucles, et le pipe-line d'un PROCESSEUR très rapide dans l'exécution des boucles serrées comme votre ci-dessus.
Mise à jour
Comme une bulle de tri, les ouvrages suivants, avec seulement deux boucles;
Si vous n'insistez pour avoir des boucles individuelles de chaque dimension, alors c'est la bonne voie;
Ce code n'est pas bon, C++, permettez-moi de souligner une chose:
Pour cela:
C++ a une fonction intégrée,
std::swap
, a déclaré dans l'en-têtealgorithm
, de sorte que vous pouvez utiliser:Maintenant, pour l'algorithme. Si vous utilisez une matrice comme ceci:
Il devrait sortie
Rien de nouveau.
L'algorithme de tri devrait ressembler à quelque chose comme ceci: