nichtrekursive quicksort Implementierung



  • Hallo,
    als ich folgenden Code eines angeblich nicht rekursiven Quicksorts
    an die Hand bekam, hab ich versucht es nachzuvollziehen, hatte allerdings
    zunaechst den Ueberblick zwischen Index und Arrayelementen verloren,
    schliesslich war mir immer noch unklar warum das funktionieren sollte,
    also sortieren sollte und zu guter letzt hat es dann auch nicht funktioniert.

    inline void push2( stack<int> &s, int A, int B)
    	{
    		s.push( B);
    		s.push( A);
    	}
    
    	inline int partition( int lo , int hi)
    	{
    		return (lo + hi) / 2;
    	}
    
    /******************************************************************************
    	Implementierung von Quicksort :
    		lo : niedrigste index
    		hi : max index 
    ******************************************************************************/
    
    	void Quicksort( int arr[], int lo , int hi) 
    	{
    		cout << "Quicksort: init" << endl;
    
    		stack<Item> s;
    
    		int i = lo,
    			j = hi,
    			x = 0;
    
    		push2( s, lo, hi);
    
    		while( !s.empty())
    		{
    			lo = s.top();
                      s.pop();
    
    			hi = s.top();
                      s.pop();
    
    			if( hi <= lo)
    				continue;
    
    			int i = partition( lo, hi);
    
    			if( i - lo > hi - i)
    			{
    				push2( s, lo, i - 1);
    				push2( s, i + 1, hi);
    			}
    			else
    			{
    				push2( s, i + 1, hi);
    				push2( s, lo, i - 1);
    			}
    		}
          }
    

    Kann mir jemand helfen und mir bitte entweder den Code irgendwie deuten bzw sagen, wo da der Fehler liegt oder ein Beispiel eines nichtrekursiven Quicksorts geben der auch funktioniert.
    Danke



  • Wo wird da was mit dem Array gemacht?

    mfg
    v R



  • Das war ja gerade mein Indexproblem, ich dachte irgendwo ist wohl statt mit Arrayelementen, versehentlich mit den Indizes rumgehauen worden, aber die Stelle konnte ich eben nicht finden, weshalb ich ja eben auch nicht wirklich erkenne warum die Funktion denn sortieren soll, geschweige denn den quicksort darin so richtig erkennen kann.


Anmelden zum Antworten