Laufzeit von STL vector sort()



  • vector hat keine eigene sort-Funktion, ich nehme also an du meinst sort() aus
    <algorithm>.
    Für sort() schreibt der Standard eine AV-Komplexität von:
    - O(n*log(n))
    vor, aber nicht welcher Algorithmus verwendet werden MUSS. Die WC-Komplexität
    kann daher nur für jede Implementierung extra angegeben werden.



  • ich denke mal es ist fast immer quick-sort.



  • Ich denke, es ist meistens ein Quicksort, der bei einer bestimmten Kleinheit des Teilintervalls dann einen anderen Algorithmus bemüht, z.B. InsertionSort.



  • warum glaubt ihr nicht wie im link angegeben an intro-sort?



  • Was schreiben die denn da für einen Müll auf cppreference.com? Das ist doch gar nicht im Standard vereinbart.



  • algorithm aus visual c++ 7.1 nutzt quicksort



  • sorry stimmt nicht so ganz. so weit ich sehe quicksort, heap sort und insertion sort

    template<class _RanIt,
    	class _Diff,
    	class _Pr> inline
    	void _Sort(_RanIt _First, _RanIt _Last, _Diff _Ideal, _Pr _Pred)
    	{	// order [_First, _Last), using _Pred
    	_Diff _Count;
    	for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; )
    		{	// divide and conquer by quicksort
    		pair<_RanIt, _RanIt> _Mid =
    			_Unguarded_partition(_First, _Last, _Pred);
    		_Ideal /= 2, _Ideal += _Ideal / 2;	// allow 1.5 log2(N) divisions
    
    		if (_Mid.first - _First < _Last - _Mid.second)	// loop on larger half
    			_Sort(_First, _Mid.first, _Ideal, _Pred), _First = _Mid.second;
    		else
    			_Sort(_Mid.second, _Last, _Ideal, _Pred), _Last = _Mid.first;
    		}
    
    	if (_ISORT_MAX < _Count)
    		{	// heap sort if too many divisions
    		std::make_heap(_First, _Last, _Pred);
    		std::sort_heap(_First, _Last, _Pred);
    		}
    	else if (1 < _Count)
    		_Insertion_sort(_First, _Last, _Pred);	// small, insertion sort
    	}
    


  • ............ schrieb:

    Was schreiben die denn da für einen Müll auf cppreference.com? Das ist doch gar nicht im Standard vereinbart.

    Nochmal, der Standard gibt Komplexitätsgarantien, schreibt aber keine Implementierung vor.



  • .......... schrieb:

    sorry stimmt nicht so ganz. so weit ich sehe quicksort, heap sort und insertion sort

    schau mal ganz genau, ob es nicht doch introsort ist. introsort benutzt nämlich normalerweise quicksort, heap sort und insertion sort.

    edit: naja, schau einfach nur auf die schleife

    for (; _ISORT_MAX < (_Count = _Last - _First) && 0 < _Ideal; )
    

    ja, der standfard definiert nur komplexitätsgarantien, aber das ändert nichts daran, daß man als user ruhig von introsort ausgehen sollte.



  • Jo, deswegen hat sich ...... ja auch gewundert, was da bei cppreference steht. Aber gut, daß Du dein nochmal Fett gesetzt hast. 🙄


Anmelden zum Antworten