3 Zahlen nach Größe Sortieren



  • Ich glaub' Du denkst viel zu kompliziert. Wie sortierst denn zwei Zahlen?

    wenn a > b, tauschen

    Drei Zahlen:

    wenn a > c, tauschen
    wenn a > b, tauschen
    wenn b > c, tauschen



  • @Th69 sagte in 3 Zahlen nach Größe Sortieren:

    PS: @hustbaer: Das Sortieren hat @PeterKat ja schon...

    Oops! Ich hab übersehen dass es da was zu scrollen gibt!

    @PeterKat Sorry, mein Fehler!



  • Für den Einstieg in C++ würde ich Dir empfehlen, direkt auf std::vector der Standardbibliothek zurückzugreifen, statt auf die statischen C-style Arrays; und Dich mit dem Gebrauch dieses Containers vertraut zu machen. Zwei der m.E.n. wichtigsten Vorteiler von std::vector gegenüber den Arrays sind, dass sie sich dynamisch in ihrer Größe anpassen lassen und sie direkt mit den Algorithmen der Standardbibliothek zusammenspielen.

    Als zweites würde ich auch für so etwas wie das Sortieren direkt auf den angebotenen Sortieralgorithmus std::sort der Standardbibliothek setzen. Auch wenn das hier mit drei Zahlen ein triviales Beispiel ist, so halte ich es persönlich für zielführender, zuerst die vorhandenen Standardverfahren kennenzulernen, statt alles nachzuprogrammieren.

    In untenstehendem Code findest Du einen Vorschlag. Für die Nutzung von std::vector musst Du den Header <vector> einbinden. Für den Standardsortieralgorithmus std::sort den Header <algorithm>.

    Du siehst beim Aufruf von sort, dass man diesem hier nur den Beginn und das Ende des Vektors übergeben muss, um diesen von Kleiner nach Größer sortieren zu lassen. Um die Differenz zu ermitteln, kann man dann einfach das letzte (größte) und erste (kleinste) Element aus dem sortierten Vektor voneinander subtrahieren.

    Ein Container wie std::vector erlaubt auch noch den sehr eleganten Zugriff auf seine Elemente mittels einer sog. "range-based for loop", die sich sehr intuitiv lesen lässt.

    Ich habe mal auf sonstige Optimierungen (insbesondere Referenzen) verzichtet, um nicht zu viele unbekannte Konzepte jetzt zu Beginn einzubringen. Darauf wirst Du dann im Laufe Deiner Lernphase stoßen. Nur die Eingabe der Zahlen habe ich mal in eine extra Funktion ausgelagert, um das Verfahren damit zu illustrieren.

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    std::vector<int> read_numbers(int count)
    {
    	// create temporary vector to store input data
    	std::vector<int> vec;
    
    	// store input into newly created vector
    	int number{ 0 };
    	for (int i{ 0 }; i < count; ++i) {
    		std::cout << (i + 1) << ". number: ";
    		std::cin >> number;
    		vec.push_back(number);
    	}
    
    	// return copy of temporary vector
    	return vec;
    }
    
    int main()
    {
    	int count{ 3 };
    	std::vector<int> numbers;
    
    	// read numbers from command line and store these in vector numbers
    	numbers = read_numbers(count);
    
    	// use standard lib's sort algorithm to sort the vector
    	std::sort(numbers.begin(), numbers.end());
    
    	// calculate the difference between largest and smallest number in vector
    	int difference = numbers.back() - numbers.front();
    
    	// output the sorted vector
    	for (int x : numbers) {
    		std::cout << x << ' ';
    	}
    	std::cout << "\n";
    
    	// output difference
    	std::cout << "difference between largest and smallest number is " << difference;
    
    	return 0;
    }
    


  • @taocp sagte in 3 Zahlen nach Größe Sortieren:

    Auch wenn das hier mit drei Zahlen ein triviales Beispiel ist,

    Da es so trivial ist, ist es ein gutes Beispiel dafür eigene Gedankengänge in Code zu giessen.

    Irgendwann muss man damit anfangen - je früher, desto besser.
    Immer nur fertige/fremde Sachen zusammen klickern bringt einen nicht weiter.



  • @taocp Das "Sortiere mal drei Zahlen"-Problem ist in der Regel nur eine Denksportaufgabe und nix wofür ma vectoren oder std::sort() braucht.



  • Zum Sortieren gibt es Algorithmen, die einfachsten heißen bubble-sort, insertion-sort und quick-sort. Zu deren Funktionsweise findest du im Netz genug Material, auch wie man sie Umsetzt. Doch wenn du eine Programmiersprache lernen willst solltest du die Algorithmen selbstständig umsetzten können wollen. Das geht mit Schleifen und Abbruchbedingungen die auf Arrays (den zu sortierenden Zahlen) operieren.



  • @PeterKat Dein Code ist ein Insertion-Sort. Dazu habe ich folgende Implementation entwickelt
    array sind die zu sortierenden Zahlen, size die Länge des Arrays

    void msort(int *array, int size){
    	int i;
    	int j;
    	int tmp;
    	for(i=0; i<size - 1; i++){
    		j = i + 1;
    		tmp = array[j];
    		while(j>0 && array[j - 1]>tmp){
    			array[j] = array[j - 1];
    			--j;
    		}
    		array[j] = tmp;
    	}
    }
    


  • @EL-europ sagte in 3 Zahlen nach Größe Sortieren:

    Das geht mit Schleifen und Abbruchbedingungen die auf Arrays (den zu sortierenden Zahlen) operieren.

    das Selbige für Dich:

    @Swordfish sagte in 3 Zahlen nach Größe Sortieren:

    Das "Sortiere mal drei Zahlen"-Problem ist in der Regel nur eine Denksportaufgabe und nix wofür ma vectoren oder std::sort() braucht.



  • @Swordfish
    Was ist auch für mich 🤔



  • @EL-europ sagte in 3 Zahlen nach Größe Sortieren:

    @Swordfish
    Was ist auch für mich 🤔

    Was nach dem Doppelpunkt folgt.



  • Vielen Dank ich hab es jetzt


Log in to reply