Warum ist C # Array.BinarySearch so schnell?

8

Ich habe gerade einen sehr einfachen binarySearch-Algorithmus in C # implementiert, um ganze Zahlen in einem Integer-Array zu finden:

Binärsuche

%Vor%

Wenn ich es mit C # 's nativem Array.BinarySearch() vergleiche, kann ich sehen, dass Array.BinarySearch() mehr als doppelt so schnell als meine Funktion ist, jedes Mal.

MSDN auf Array.BinarySearch :

  

Durchsucht das gesamte eindimensionale sortierte Array nach einem bestimmten Element unter Verwendung der IComparable generischen Schnittstelle, die von jedem Element des Arrays und vom angegebenen Objekt implementiert wird.

Was macht diesen Ansatz so schnell?

Testcode

%Vor%

Testergebnisse

%Vor%     
Daniel 08.08.2016, 20:40
quelle

1 Antwort

9

Ihr Code ist schneller, wenn Sie außerhalb von Visual Studio ausgeführt werden:

Ihre vs Array's:

%Vor%

Der Array-Code ist zwar bereits im Framework optimiert, prüft aber auch deutlich mehr als Ihre Version (z. B. kann Ihre Version überlaufen, wenn arr.Length größer ist als int.MaxValue / 2 ) und, wie bereits erwähnt, dafür gedacht ist eine breite Palette von Typen, nicht nur int[] .

Im Grunde genommen ist es nur langsamer, wenn Sie Ihren Code debuggen, weil Array-Code immer in release und mit weniger Kontrolle hinter den Kulissen ausgeführt wird.

    
Andrew 08.08.2016, 22:48
quelle

Tags und Links