2017-03-23 7 views
2

ich einige allgemeine Algorithmen-Implementierungen in JavaScript zu studieren und fand diese ein, während für quicksort suchen: https://rawgit.com/escherba/algorithms-in-javascript/master/src/quickmiddle-sort.jsVerständnis bitweise Operation in diesem Beispiel

Es implementiert ein Array Partitionsfunktion auch:

function partition(array, left, right) { 
     var pivot = array[(left + right) >>> 1]; 
     while (left <= right) { 
      while (array[left] < pivot) { left++; } 
      while (array[right] > pivot) { right--; } 
      if (left <= right) { 
       var temp = array[left]; 
       array[left++] = array[right]; 
       array[right--] = temp; 
      } 
     } 
     return left; 
} 

Ich frage mich, was ist die Mathematik hinter der bitweisen Operation, ich bin ein ziemlich Neuling mit ihnen.

+0

Es ist nicht wirklich notwendig in JS, wahrscheinlich ausgeliehen von Java-Code, wo es notwendig ist * – harold

+0

@harold Ist es für Optimierungszwecke? – MattSom

+1

Wenn es absichtlich dort ist, dann ist das das Einzige, wofür es sein kann. – harold

Antwort

2

Angenommen, fragen Sie diesen Teil

(left + right) >>> 1 

Es gibt eine Addition von zwei Operanden und ein zero-fill shift right >>> operator mit einem Bit.

Zum Beispiel haben Sie den Wert 9 und verschieben ein Bit nach rechts.

 9 (base 10): 00000000000000000000000000001001 (base 2) 
        -------------------------------- 
9 >>> 1 (base 10): 00000000000000000000000000000100 (base 2) = 4 (base 10) 

Das Ergebnis ist eine ganze Zahl von 4.

+0

Ja, gerade in der Konsole jetzt versucht, stellte es sich so vor. Danke, klare Erklärung! – MattSom

1

bitweise Operation ist nichts anderes als die Summe der linken und rechten Werte, die durch Dividieren 2. wenn links und rechts = 2 = 7 ausgegeben wird, 9/2 und abgestumpften bis 4.

2

Verschiebung nach rechts um 1 ist genau wie dividiere durch 2 kannst du es selbst testen. rechts eine Zahl in einem binären und eine Rechtsverschiebung tun und überprüfen Sie das Ergebnis

+0

Ah, ich verstehe. Also vermeiden wir im Prinzip die Verwendung einer Divisionsfunktion, um schneller zu sein? – MattSom

+1

Ja 4 binär ist 100 Verschiebung rechts Sie verlieren die 0 das niedrigstwertige Bit, so dass wir am Ende mit 10 binär, was 2 dezimal ist :) es ist schneller, dass normale Division – Mero

Verwandte Themen