Problem mit einer Sortierfunktion...
-
(Vornweg..weiß nicht obs das richtige Board is..)
Hi leute, also ich habe mir für eine Übung eine Sortierfunktion die ein Integer Array sortiert gebastelt. (Sicher nicht die schönste und beste variante..aber egal)
Im Grunde funktioniert auch alles Prima, aber ich versteh nicht wieso der genau andersrum sortiert als ich will. .&%&$§
Wenn ich sage er solle immer die kleinste Zahl in das erste Feldelement setzten dann steht da zum Schluss die größte drin und umgekehrt....
Vielleicht blickt da einer von Euch durch ??
#include <iostream> #include <stdio.h> using namespace std; void feldausgeben(int* feld,int n); //Funktionsprototypen void sort(int* feld,int n); int main(void) { int feld[20]={110,3,2,4,5,7,6,8,10,9,9,100,101,99,98,1,200,400,450,650}; //Feld wird mit 20 Integer Initialisier feldausgeben(feld,20); //feld unsortiert ausgeben sort(feld,20); //feld sortieren feldausgeben(feld,20); //feld sortiert ausgeben return 0; } void feldausgeben(int* feld,int n) { //Funktion dient zum ausgeben des feldes cout << endl; for (int i=0; i<n;i++) { cout << "Element " << i+1 << " = " << feld[i] << endl; //feldelemente der reihe nach couten } cout << endl; return; } //funkionsende void sort(int* feld,int n) { //sortierfunktion int buffer; //variable zum zwischenspeichern der zu tauschenden integer for (int i=0;i<n;i++) { //"obere" schleife i zeigt auf das element in welches geschrieben werden soll for (int i2=0;i2<n;i2++) { //"untere" schleife i2 zeigt auf das element welches mit i verglichen wird if (feld[i2] < feld[i]) { //wenn i2 kleiner als i dann... buffer = feld[i]; //erstmal den buffer mit feld[i] füllen feld[i] = feld[i2]; //dann feld[i] mit feld[i2] füllen feld[i2] = buffer; //dann feld[i2] mit dem buffer füllen } // if zu //hier hat man dann die größte entahltene zahl in das feld[i] geschrieben } // for 2 zu //läuft solange durch bis feld[i] das letzte element ist } // for 1 zu return; } // funktion ende
So sollte eigentlich die erste Variable eine 1 sein...isses aba nich.
-
Hi!
Der Fehler ist hier:
for (int i=0;i<n;i++) { //"obere" schleife i zeigt auf das element in welches geschrieben werden soll for (int i2=0;i2<n;i2++) { //"untere" schleife i2 zeigt auf das element welches mit i verglichen wird if (feld[i2] < feld[i]) { //wenn i2 kleiner als i dann... buffer = feld[i]; //erstmal den buffer mit feld[i] füllen feld[i] = feld[i2]; //dann feld[i] mit feld[i2] füllen feld[i2] = buffer; //dann feld[i2] mit dem buffer füllen } // if zu //hier hat man dann die größte entahltene zahl in das feld[i] geschrieben } // for 2 zu //läuft solange durch bis feld[i] das letzte element ist } // for 1 zu
Du hast i mit i2 verwechselt .... also:
for (int i=0;i<n;i++) { //"obere" schleife i zeigt auf das element in welches geschrieben werden soll for (int i2=0;i2<n;i2++) { //"untere" schleife i2 zeigt auf das element welches mit i verglichen wird if (feld[i] < feld[i2]) { //wenn i2 kleiner als i dann... buffer = feld[i2]; //erstmal den buffer mit feld[i] füllen feld[i2] = feld[i]; //dann feld[i] mit feld[i2] füllen feld[i] = buffer; //dann feld[i2] mit dem buffer füllen } // if zu //hier hat man dann die größte entahltene zahl in das feld[i] geschrieben } // for 2 zu //läuft solange durch bis feld[i] das letzte element ist } // for 1 zu
Ich glaube das ist der Grund. kann aber nichts garantieren, weil ichs nicht getestet hab.
mfG
berni.l
-
mhh..doch so simpel....*peinlich...*
Ja ok, dann funktioniert es so wie es eigentlich soll
Danke dir....