[gelöst]Bubbelsort aufsteigend absteigend sortieren



  • Hi,

    ich habe habe 2 Methoden geschrieben, um eine verkettet Liste DESC bzw. ASC zu sortieren.
    Allerdings sortiert die ASC Methode DESC.
    Ich kann den Fehler leider nicht finden. Vllt. findet ihr den Fehler:

    void liste_sortieren_desc()
    	{	
    		// Pruefen ob mehr als 1 Element vorhanden sind
    		if ( size < 2 ) return;
    
    		struct knoten *a        = 0;
    		struct knoten *b        = 0;
    		struct knoten *iterator = anfang;
    		bool tausch         = false;
    		string temp;
    		int temp2          = 0;
    
    		// Bubblesort: Absteigend
    		do {
    			tausch     = false;
    			iterator = anfang;
    
    			// Jedes Element in der Liste einmal ueberpruefen
    			for ( int i=0; i<size-1; i++ ) {
    				a        = iterator;
    				b        = iterator->next;
    				iterator = iterator->next;
    
    				// Elemente miteinander vergleichen
    				if ( a->info.get_name() < b->info.get_name() ) {
    					// Elemente untereinander austauschen
    					temp = b->info.get_name();
    					b->info.set_name(a->info.get_name());
    					a->info.set_name(temp);
    
    					temp2 = b->info.get_x_koordinate();
    					b->info.set_x_koordinate(a->info.get_x_koordinate());
    					a->info.set_x_koordinate(temp2);
    
    					temp2 = b->info.get_y_koordinate();
    					b->info.set_y_koordinate(a->info.get_y_koordinate());
    					a->info.set_y_koordinate(temp2);
    
    					tausch    = true;
    				}
    			}
    		} while ( tausch ); // Solange Elemente getauscht wurden Bubblesort wiederholen
    
    	}
    
    void liste_sortieren_asc()
    	{
    	  // Pruefen ob mehr als 1 Element vorhanden sind
    	 if ( size < 2 ) return;
    
    		struct knoten *a        = 0;
    		struct knoten *b        = 0;
    		struct knoten *iterator = anfang;
    		bool tausch         = false;
    		string temp;
    		int temp2          = 0;
    
    		// Bubblesort: Aufsteigend
    		do {
    			tausch     = false;
    			iterator = anfang;
    
    			// Jedes Element in der Liste einmal ueberpruefen
    			for ( int i=0; i<size-1; i++ ) {
    				a        = iterator;
    				b        = iterator->next;
    				iterator = iterator->next;
    
    				// Elemente miteinander vergleichen
    				if ( a->info.get_name() > b->info.get_name() ) {
    					// Elemente untereinander austauschen
    					temp = b->info.get_name();
    					b->info.set_name(a->info.get_name());
    					a->info.set_name(temp);
    
    					temp2 = b->info.get_x_koordinate();
    					b->info.set_x_koordinate(a->info.get_x_koordinate());
    					a->info.set_x_koordinate(temp2);
    
    					temp2 = b->info.get_y_koordinate();
    					b->info.set_y_koordinate(a->info.get_y_koordinate());
    					a->info.set_y_koordinate(temp2);
    
    					tausch    = true;
    				}
    			}
    		} while ( tausch ); // Solange Elemente getauscht wurden Bubblesort wiederholen
    
    	}
    

    Gruß

    Dolphon



  • Ich glaub dir beim besten Willen nicht, dass du die Funktionen selbst geschrieben hast und jetzt nicht das Sortierkriterium nicht einstellen kannst 👎



  • Michael E. schrieb:

    Ich glaub dir beim besten Willen nicht, dass du die Funktionen selbst geschrieben hast und jetzt nicht das Sortierkriterium nicht einstellen kannst 👎

    lol. da hast du recht.

    @Dolphon:
    wenn ich richtig sehe, ist nur der vergleich oben > und unten <. sonst gar nix anders. und so soll es ja auch sein. wenn DESC klappt, klappt mit der änderung auch ASC.
    anscheinend hast du aus versehen beim testen die falsche richtige funktion aufgerufen und deswegen das richtig falsche ergebnis. wenn ich richtig gesehen habe und nur > zu < verändert wurde, müßte es wie gewünscht funktieren.

    ich habe nicht geprüft, ob die DESC korrekt ist. die ist mir zu arg 80er-jahre.


Anmelden zum Antworten