Zahlen sortieren
-
Nun denn, ich beschäftige mich später mal.
Ich mus nen 10Minuten vortrag über C++ halten, vor lehrern die keine Ahnung von C++ haben. Und da ich nicht nur so ein Programm drann nehmen will, lass ich das lieber weg. :>
-
[sorry 4 Doppelpost]
Aber vielen Dank für die Antworten!
-
wenn du bei deinem Ansatz bleiben willst, könnteste, damits funktioniert, z. B. so machen:
#include <iostream> using namespace std; template<int i> class Helper { template<int depth, class G> struct recurse { static inline G getMax(G* array) { G max = recurse<depth+1,G>::getMax(array); return array[depth] < max? max: array[depth]; } static inline G getMin(G* array) { G min = recurse<depth+1,G>::getMin(array); return array[depth] > min? min: array[depth]; } }; template<> struct recurse<i-1,int> { static inline int getMax(int* array) { return array[i-1]; } static inline int getMin(int* array) { return array[i-1]; } }; public: template<class T> static inline T getMax(T* array) { return recurse<0,T>::getMax(array); } template<class T> static inline T getMin(T* array) { return recurse<0,T>::getMin(array); } }; int main() { int a[5]; cout<<"Nennen sie mir 5 Zahlen:"<<endl; cout<<"Ihre erste Zahl: "; cin>>a[0]; cout<<"Ihre zweite Zahl: "; cin>>a[1]; cout<<"Ihre dritte Zahl: "; cin>>a[2]; cout<<"Ihre vierte Zahl: "; cin>>a[3]; cout<<"Ihre fünfte Zahl: "; cin>>a[4]; for (int x = Helper<5>::getMin(a); x <= Helper<5>::getMax(a); ++x) { for(int i = 0; i < 5; ++i) { if(x == a[i]) cout << a[i] << " "; } } return 0; }oder so ähnlich

-
Du schlägst nicht wirklich Templates vor, wenn er schon am Bubblesort-Algorithmus scheitert?

Beim sortieren mußt Du nicht wirklich mit Deinem x vergleichen, sortier einfach ein Array, eben das, welches Deine eingegebenen Werte aufnimmt.
#include <iostream> using namespace std; int main(void) { int a[5]; //Array nimmt Werte auf int i; //für Zählschleifen bool pruef = true; //Variable für Sortiervorgang for (i = 0; i < 5; i++) //Eingabe der Werte { cout << "Zahl " << i+1 << " eingeben: "; //Arrays beginnen mit Index 0 wir wollen aber bei 1 starten cin >> a[i]; } //Solange was getauscht wird while (pruef) { pruef = false; for (int i = 0; i < 4; i++) { if (a[i] > a[i+1]) //Zahl an Position i größer als an i+1? { int temp = a[i+1]; //dann vertauschen mit simplem Dreieckstausch a[i+1] = a[i]; a[i] = temp; pruef = true; //Werte wurden getauscht -> am Ende des Feldes neuer Druchlauf beginnend beim Index 0 } } } for (i = 0; i < 5; i++) //Ausgabe der Werte cout << a[i] << "\t"; //Die Werte der Zahlen 1 bis 5 werden ausgegeben cin >> a[0]; //damit sich Programm nicht sofort beendet; Wert eingeben um zu beenden return 0; }Trotzdem solltest Du Dir mal ein paar Tutorials reinziehen, irgendwelche Klassenkameraden könnten Fragen haben; die Lehrer werden sie auf jeden Fall haben und dann solltest Du schon etwas erklären können

-
Hi,
ich habe ein ähnliches Problem.
Allerdings habe ich ein Array (xPtr) bestehend aus Pointers auf Excel-Daten (versuche eine für Excel geschriebene Funktion anzupassen).wenn ich folgendes versuche
//sorting data in ascending order for ( i=0; i<xSize; i++ ) { for ( iCounter=i+1; i<xSize; i++ ) { if ( xPtr[i].val.num > xPtr[iCounter].val.num ) { dTmp = xPtr[i].val.num; xPtr[i].val.num = xPtr[iCounter].val.num; xPtr[iCounter].val.num = dTmp; } } }werden die Daten nicht sortiert.

Was mache ich denn falsch?
Habe auch nicht so viel Erfahrung mit C++.
-
Vielleicht irre ich mich aber müßte in der 2. for-Schleife nicht iCounter++ statt i++ stehen?
-
UNeverNo schrieb:
Du schlägst nicht wirklich Templates vor, wenn er schon am Bubblesort-Algorithmus scheitert?

überhaupt wäre dann eher ein std::sort/stable_sort etc. angebracht :p
-
camper schrieb:
UNeverNo schrieb:
Du schlägst nicht wirklich Templates vor, wenn er schon am Bubblesort-Algorithmus scheitert?

überhaupt wäre dann eher ein std::sort/stable_sort etc. angebracht :p
ähm.. *hust* nein camper, der von std::sort verwendetete sortieralgorithmus wird dann doch etwas anders funktionieren als der vom host vorgeschlagene "sortieralgorithmus"

-
UNeverNo schrieb:
Vielleicht irre ich mich aber müßte in der 2. for-Schleife nicht iCounter++ statt i++ stehen?
In der Tat.
Funktioniert zwar noch nicht so wie ich mich vorgestellt habe, aber jetzt bin ich auf dem richtigen Wege.
Vielen Dank.

-
life schrieb:
ähm.. *hust* nein camper, der von std::sort verwendetete sortieralgorithmus wird dann doch etwas anders funktionieren als der vom host vorgeschlagene "sortieralgorithmus"
Ja, schneller (und garantiert korrekt)

eLiNK schrieb:
UNeverNo schrieb:
Vielleicht irre ich mich aber müßte in der 2. for-Schleife nicht iCounter++ statt i++ stehen?
In der Tat.
Funktioniert zwar noch nicht so wie ich mich vorgestellt habe, aber jetzt bin ich auf dem richtigen Wege.
Und natürlich solltest du in der zugehörigen Abbruchbedingung auch "iCounter<xSize" abtesten.