Si j'ai de l'utilisateur à entrer les 10 nombres aléatoires et je tiens à les ordonner du plus petit au plus grand quelle est la meilleure méthode pour ce faire à l'aide de la plus élémentaire langage C++.
std::vector<int> numbers;//get the numbers from the user here.
std::sort(numbers.begin(), numbers.end());
pourquoi ne pas utiliser une structure qui maintient la commande ? C'est probablement plus rapide à faire le tri juste une fois à la fin. alors que je suis d'accord avec cela, et à l'aide d'un vector pour les petits d'entrée de jeux, il semble prématuré d'optimisation! La performance asymptotique est équivalent O(N log N), alors vous allez pour le facteur constant ici, au prix de compliquer le code. Je ne sais pas, sort est tout à fait explicite sur ce qu'il fait et vector semble être la plus simple possible du contenant. Il ne semble pas très compliqué pour moi, je suppose. M.: j'ai à la fois, et il serait certainement travailler. Personnellement, j'ai développé un peu de la même attitude que @kotlinkski. J'ai besoin d'un peu plus que juste le fait que le conteneur est toujours triée pour justifier de l'utiliser. Un multiset est pas seulement lent, mais il utilise un peu plus de mémoire (données + 2 pointeurs par nœud). Sur x64 Windows, par exemple, un [multi]ensemble de 10 ints a 40 octets de données et de 160 octets de pointeurs. OMI, cette situation n'est pas justifier.
Utiliser une structure qui maintient la commande: std::multiset
#include<iostream>#include<set>#include<boost/lexical_cast.hpp>int main(int argc,char* argv[]){
std::multiset<int>set;for(int i =1; i != argc;++i){set.insert(boost::lexical_cast<int>(argv[i]));}for(int i:set){ std::cout << i <<" ";}
std::cout <<"\n";}
Invocation:
$ yourprogram 1546782678
(Note: le nombre d'arguments n'est pas limité)
for (int i: set) qui ne ressemble pas à C++ pour moi. C++0x nouveau range-based for déclaration (6.5.4 [stmt.allaient]), je ne sais pas si un compilateur déjà la mettre en œuvre.
Cela dépend de vos exigences. Si vous voulez juste faire le tri, et la vitesse est modérée préoccupation, d'une insertion de tri serait bien pour un si petit n-valeur (10). Rapide à mettre en œuvre (à partir de zéro), et adaptée pour les petites tailles.
//this is sorting min--->max without pointers#include<iostream>usingnamespace std;int main(){int n;
cout<<"How much numbers you wanna sort? "<<endl;
cin>>n;int broj[n];
cout<<"Enter numbers: "<<endl;for(int k=0;k<n;k++){
cin>>broj[k];}int min=0;for(int z=0;z<n;z++){
loop:
min=broj[z];for(int i=z;i<n;i++){if(min<=broj[i]){}else{
min=broj[i];
broj[i]=broj[z];
broj[z]=min;goto loop;}}}
cout<<endl<<"--------------"<<endl;for(int j=0;j<n;j++){
cout<<broj[j]<<endl;}return0;}
Essayez d'ajouter quelques explications donc c'est l'ancien programme de l'école avec seulement si,pour et goto boucle..si le cœur de ce programme est dans ce "je" pour la boucle qui remplace les numéros sur les différents index sur le tableau..min est variable que nous utilisons pour faciliter le "transport" de valeurs..dans l'ensemble mon avis si vous avez visual studio ou un programme qui peut aller étape par étape (ligne par ligne) lorsque vous l'exécutez,il vous aidera à comprendre ce concept...c'est un peu plus long, mais avec cela, vous aurez à développer votre programmation façon de penser
Vous pouvez écrire vous-même quelque chose, mais ne devrait vraiment utiliser la fonction qsort.
Tout à fait le contraire. En C++ il y a rarement (jamais?) une bonne raison pour utiliser qsort. Vous aurait été correct si la question a été marquée C (pas C++) pour des précisions sur @Jerry commentaire, vous devez utiliser à la place std::sort.
OriginalL'auteur pyfex
C'est probablement plus rapide à faire le tri juste une fois à la fin.
alors que je suis d'accord avec cela, et à l'aide d'un
vector
pour les petits d'entrée de jeux, il semble prématuré d'optimisation! La performance asymptotique est équivalent O(N log N), alors vous allez pour le facteur constant ici, au prix de compliquer le code.Je ne sais pas,
sort
est tout à fait explicite sur ce qu'il fait etvector
semble être la plus simple possible du contenant. Il ne semble pas très compliqué pour moi, je suppose.M.: j'ai à la fois, et il serait certainement travailler. Personnellement, j'ai développé un peu de la même attitude que @kotlinkski. J'ai besoin d'un peu plus que juste le fait que le conteneur est toujours triée pour justifier de l'utiliser. Un multiset est pas seulement lent, mais il utilise un peu plus de mémoire (données + 2 pointeurs par nœud). Sur x64 Windows, par exemple, un [multi]ensemble de 10 ints a 40 octets de données et de 160 octets de pointeurs. OMI, cette situation n'est pas justifier.
OriginalL'auteur Jerry Coffin
Utiliser une structure qui maintient la commande: std::multiset
Invocation:
(Note: le nombre d'arguments n'est pas limité)
for (int i: set)
qui ne ressemble pas à C++ pour moi.C++0x nouveau
range-based for
déclaration (6.5.4 [stmt.allaient]), je ne sais pas si un compilateur déjà la mettre en œuvre.OriginalL'auteur Matthieu M.
Cela dépend de vos exigences. Si vous voulez juste faire le tri, et la vitesse est modérée préoccupation, d'une insertion de tri serait bien pour un si petit n-valeur (10). Rapide à mettre en œuvre (à partir de zéro), et adaptée pour les petites tailles.
OriginalL'auteur MM.
donc c'est l'ancien programme de l'école avec seulement si,pour et goto boucle..si le cœur de ce programme est dans ce "je" pour la boucle qui remplace les numéros sur les différents index sur le tableau..min est variable que nous utilisons pour faciliter le "transport" de valeurs..dans l'ensemble mon avis si vous avez visual studio ou un programme qui peut aller étape par étape (ligne par ligne) lorsque vous l'exécutez,il vous aidera à comprendre ce concept...c'est un peu plus long, mais avec cela, vous aurez à développer votre programmation façon de penser
OriginalL'auteur Leo Ivas
Vous pouvez écrire vous-même quelque chose, mais ne devrait vraiment utiliser la fonction qsort.
qsort
.Vous aurait été correct si la question a été marquée C (pas C++)
pour des précisions sur @Jerry commentaire, vous devez utiliser à la place
std::sort
.OriginalL'auteur Kudesnik