Sotieren, In Liste, Weitergehen



  • Hallo

    Ich mochte eine reihe von Zahlen sortieren( absteigend ) !
    das ganze soll so funktionieren

    3856 den ersten mim 2ten wert vertauschen
    8356 dann den 2ten mim 3ten
    8536 4t2n mim ten
    8563 und dann wieder von vorne usw bis die zahlen absteigend sortiert sind!

    Die zahlen sind als verkette Liste gespeichert!
    das ganze soll in einer schleife passieren !

    if (StartElement->wert <= StartElement->naechstesElement->wert)
    	{
    	  temp = StartElement->wert;
    	  StartElement->wert = StartElement->naechstesElement->wert;
    	  StartElement->naechstesElement->wert = temp;
             }
    

    so werden die ersten beiden Werte vertauscht doch wie kann ich es machen das im nächsten durchlauf der 2te mim 3ten Wert vertauscht wird usw... ??
    hab schon mit StartElement++ probiert funtzt nicht!
    Hab keine ahnung wie ich das machn soll!
    Hoffe ihr könnt mir helfen !



  • Du brauchst einen "Zeiger" mit dem du durch die Liste läufst. Wenn du expliziet StartElement abfragst, ist klar dass du immer nur die ersten beiden Werte tauschst.

    Also einen Index-Zeiger auf das erste Element anlegen. Wert vom Index-Zeiger mit Wert vom Index-Zeiger-Nachfolger vergleichen und eventuell tauschen.
    Dann den Zeiger aufs nächste Element setzen und wieder Wert vom Index-Zeiger mit Wert vom Index-Zeiger-Nachfolger vergleichen und eventuell tauschen.

    Solange, bis du am Ende der Liste bist.



  • Ich würde vermuten man muss StartElement auf das nächste Element zeigen lassen, aber da wir nicht wissen was StartElement überhaupt ist, wird das wohl auf ewig im Dunkeln bleiben. (Es seidenn der OP liefert die nötigen Infos mal nach)

    EDIT:
    Okay, wir wissen doch mehr (aber immernoch nicht genug 😉 )

    Beispiel:

    StartElement = StartElement->naechstesElement;
    

    Allerdings besser nicht in StartElement direkt, sondern in einer temporären Zeigervariablen.



  • Hier erstmal der Ganze Code !

    #include <iostream>
    using namespace std;
    
    struct ListenElement
    {
    		int wert;										
    		ListenElement * naechstesElement;				
    };
    
    void sortiere (int zaehler, ListenElement * StartElement, bool sortier_richtung) ;
    
    void main()
    {
    	int Eingabe, counter = 0;
    
    	ListenElement *akt_wert=NULL, *erster_wert=NULL, *n=NULL;							
    
    	while(Eingabe!=0)
    	{
    		cout<<"Bitte wert eingeben:  ";
    		cin>> Eingabe;
    
    	    if(Eingabe!=0)
    		{
    			counter++;
    			n = new ListenElement;                   
    			n->wert = Eingabe;							
    			n->naechstesElement = 0;					 
    
    			if(erster_wert==NULL)
    			{
    				erster_wert=n;
    	            akt_wert=erster_wert;		
    			}
    			else
    			{
    				akt_wert->naechstesElement=n;
    			    akt_wert=akt_wert->naechstesElement;
    			}
    			cout << "akt wert ist: " << akt_wert << endl;
    
    		}
    	}
    
    	akt_wert=erster_wert;
    
    	cout<<"Eingegebene Liste" <<endl;					
    
    	sortiere(counter,erster_wert,1);
    
    	while(akt_wert!=NULL)				
    	{
    
    		cout<<akt_wert->wert<<endl;						 
    
    		akt_wert = akt_wert->naechstesElement;			
    
    	}
    
    }
    
    void sortiere(int zaehler, ListenElement * StartElement, bool sortier_richtung)     
    {
    	int temp=0;
    
    	if (sortier_richtung)
    	{
    		for (int i=1;i<=zaehler;i++)     
    		{
    
    			if (StartElement->wert <= StartElement->naechstesElement->wert)
    			{
    				temp = StartElement->wert;
    				StartElement->wert = StartElement->naechstesElement->wert;
    				StartElement->naechstesElement->wert = temp;
    
    			}
    
    		}
    	}
    
    	if (zaehler>1) sortiere(zaehler-1, StartElement, sortier_richtung);
    }
    


  • Armer Student schrieb:

    if (StartElement->wert <= StartElement->naechstesElement->wert)
    			{
    				temp = StartElement->wert;
    				StartElement->wert = StartElement->naechstesElement->wert;
    				StartElement->naechstesElement->wert = temp;
    								
    			}
    

    Wie ich bereits sagte, fragst du immer nur das erste und zweite Element ab, auch wenn deine Liste 4711 Einträge hätte. Also bau nen Zeiger ein, mit dem du über die Liste läufst.
    Das hattet ihr sicher in der Vorlesung (bei uns hieß der Zeiger immer current 😉 ).

    /edit:

    Armer Student schrieb:

    hab schon mit StartElement++ probiert funtzt nicht!

    Kann es sein, dass du nicht den Hauch einer Ahnung hast, was eine linear verkettete Liste ist??
    Guckst du hier: http://de.wikipedia.org/wiki/Liste_%28Datenstruktur%29

    Sonst brauchst du es IMHO gar nicht weiter zu versuchen.



  • Danke schonmal

    @ DarthZiu

    Sorry hab keine Ahnung was du meinst ham sowas in der Art noch nicht gemacht !
    wie soll ich die Liste



  • ???


Anmelden zum Antworten