Datensortierung
-
Hi,.
und zwar möchte ich die Informationen, die sich in einem Feld befinden sortieren (ohne Bubblesort)
Ich geh so vor den größten wert zu suchen
int x; int big; int king; int alter[] = {5,8,3}; int main(int argc, char *argv[]) { for(x=0; x<3; x++) { if(alter[x] > big) { big = alter[x]; king = king + 1; } } cout << "\n\n" << king; (king ist 3 also Array[2]) system("PAUSE"); return EXIT_SUCCESS; }Und dann möchte ich ja den größten wert löschen,..das er im feld eine 0 hat,..und dann soll er den 2 größten wert suchen und so weiter aber ich bekomme das nicht hin,.
alter[king] = 0;
und eine weitere schleife dann laufen zulassen ich hoffe auf Hilfe,..
das es dann so aussieht array[2] < array[0] < array[1];
array[2] = 3
array[0] = 5
array[1] = 8
mfgSvolf
-
Svolf schrieb:
Und dann möchte ich ja den größten wert löschen,..das er im feld eine 0 hat,..und dann soll er den 2 größten wert suchen und so weiter aber ich bekomme das nicht hin,.
alter[king] = 0;
und eine weitere schleife dann laufen zulassen ich hoffe auf Hilfe,..
das es dann so aussieht array[2] < array[0] < array[1];
array[2] = 3
array[0] = 5
array[1] = 8Hallo Svolf,
zunächst musst Du Dir in der Variablen 'king' den Index und nicht die Anzahl der Versuche merken, die Du benötigst, um das Maximum zu finden.
Dann kannst Du das ganze in eine weitere Schleife fassen, die jeweils das Maximum und den zugehörigen Index ausgibt. Also:
#include <iostream> int main() // wenn argc & argv nicht gebraucht werden, so lasse sie weg { using namespace std; int alter[] = {5,8,3}; // lokale Variablen sind globalen vorzuziehen for( int durchlauf=0; durchlauf<sizeof(alter)/sizeof(*alter); ++durchlauf ) { int king; int big = -9999; // mit kleinem Wert initialisieren; => std::numeric_limits< int >::min() for( int x=0; x<sizeof(alter)/sizeof(*alter); ++x ) // besser: x < sizeof(alter)/sizeof(*alter) statt x<3 { if(alter[x] > big) { big = alter[x]; king = x; // Index des Maximums in alter[] merken } } cout << "\nalter[" << king << "] = " << alter[king] << endl; // ausgeben alter[king] = 0; // Maximum 'abschalten' } cin.get(); // besser als system("PAUSE"); siehe FAQ return 0; }und für den Interessierten noch mal die Alternative mit STl-Hilfe:
#include <iostream> #include <algorithm> // max_element int main() // wenn argc & argv nicht gebraucht werden, so lasse sie weg { using namespace std; int alter[] = {5,8,3}; // lokale Variablen sind globalen vorzuziehen for( int durchlauf=0; durchlauf<sizeof(alter)/sizeof(*alter); ++durchlauf ) { int* iMax = max_element( alter, alter + sizeof(alter)/sizeof(*alter) ); cout << "\nalter[" << (iMax-alter) << "] = " << *iMax << endl; // ausgeben *iMax = 0; // Maximum 'abschalten' } cin.get(); // besser als system("PAUSE"); siehe FAQ return 0; }Gruß
Werner