2016-05-30 5 views
0

Ich habe eine Javascript-Datei von zwei Algorithmen geschrieben. Wie im folgenden Code gezeigt, verwende ich eine for loop, um zufällige Werte zu generieren, die von beiden Algorithmen als Eingabe verwendet werden.Wie man die Ausgabe einer Funktion nach der anderen anzeigt

Zur Zeit zeige ich die Ausgabe der binarySearch und SearchSorted alternativ.

Das Problem, das ich bin vor ist, ich habe die gleichen Array Werte, die durch randomlyGenerateArray im Hauptprogramm sowohl für einen aussagekräftigen Vergleich der Algorithmen erzeugt passieren. Aber ich weiß nicht, wie man das Ausgabeformat ändert.

Ich habe gedacht, sie in verschiedenen Schleifen hinzuzufügen, aber wie ich oben erklärt habe, muss ich die gleichen randomArray Werte für beide Algorithmen verwenden.

heißt Der Code unten erzeugt eine Ausgabe wie unten gezeigt -

Binary Search Successful 1 Search Sorted Successful 5 Binary Search Successful 3 Search Sorted Successful 10

Wie kann ich die Ausgabe von Binary Search zuerst angezeigt und dann Ausgabe der Suche sortiert angezeigt werden? Es ist so etwas. Jede Hilfe wird sehr geschätzt.

Binary Search Successful 1 Binary Search Successful 3 Search Sorted Successful 5 Search Sorted Successful 10

// Binary Search Algorithm 
function binarySearch(A,K) 
{ 
    var l = 0; // min 
    var r = A.length - 1; //max 
    var n = A.length; 
    var operations = 0; 

    while(l <= r) 
    { 
      var m = Math.floor((l + r)/2); 
      operations++; 

      if(K == A[m]) 
      { 
       console.log('Binary Search Successful %d',operations); 
       return m; 
      } 
      else if(K < A[m]) 
      { 
       r = m - 1; 
      } 
      else 
      { 
       l = m + 1; 
      } 
    } 
    operations++; 
    console.log('Binary Search Unsuccessful %d',operations); 
    return -1; 
} 

// Search Sorted Algorithm 
function searchSorted(A, K) 
{ 
    var n = A.length; 
    var i = 0; 
    var operations = 0; 

    while (i < n) 
    { 
     operations++; 
     if (K < A[i]) 
     { 
      return -1; 
     } 
     else if (K == A[i]) 
     { 
      console.log('Search Sorted Successful %d', operations); 
      return i; 
     } 
     else 
     { 
      i = i + 1; 
     } 
    } 
    operations++; 
    console.log('Search Sorted Unsuccessful %d', operations); 
    return -1; 
} 

// Random Array generator 
var randomlyGenerateArray = function(size) 
{ 
    var array = []; 
    for (var i = 0; i < size; i++) 
    { 
     var temp = Math.floor(Math.random() * maxArrayValue); 
     var final = array.splice(5, 0, 30); 
     array.push(final); 
    } 
    return array; 
} 

//Sort the Array 
var sortNumber = function(a, b) 
{ 
    return a - b; 
} 

// Main Program 
var program = function() 
{ 
    var incrementSize = largestArray/numberOfArrays; 
    for (var i = smallestArray; i <= largestArray; i += incrementSize) 
    { 
     var randomArray = randomlyGenerateArray(i); 
     var sort = randomArray.sort(sortNumber); 
     var randomKey = 30; 
     binarySearch(sort, randomKey); 
     searchSorted(sort, randomKey); 
    } 
} 

var smallestArray = 10; 
var largestArray = 10000; 
var numberOfArrays = 1000; 
var minArrayValue = 1; 
var maxArrayValue = 1000; 

program(); 
+0

Separate die binäre und sortiert Suche in 2 Schlaufen. Außerdem, nur um zu klären, Soll in jedem Schritt ein neues Array generiert werden? – Zero

+0

Ich muss das gleiche 'randomArray' als Eingabe für beide Algorithmen verwenden. Wenn ich sie getrennt habe, muss ich 'randomGenerateArray' erneut für die andere Schleife aufrufen, die dann nicht die gleichen Array-Werte wie die andere hat. – Dazzler

Antwort

1

Sie könnten speichern die sortierten randomArray s in einem Array, dann führen Sie eine for-Schleife für jede Suche (die ich sortedRandomArrays genannt habe).

Das Hauptprogramm würde dann wie folgt aussehen:

// Main Program 
var program = function() 
{ 
    var incrementSize = largestArray/numberOfArrays; 
    var sortedRandomArrays = []; 
    for (var i = smallestArray; i <= largestArray; i += incrementSize) 
    { 
     var randomArray = randomlyGenerateArray(i)); 
     var sort = randomArray.sort(sortNumber); 
     sortedRandomArrays.push(sort); 
     var randomKey = 30; 
    } 

    for (var i = 0; i < sortedRandomArrays.length; i++) 
    { 
     binarySearch(sortedRandomArrays[i], randomKey); 
    } 

    for (var i = 0; i < sortedRandomArrays.length; i++) 
    { 
     searchSorted(sortedRandomArrays[i], randomKey); 
    } 
} 
+0

Danke, das funktioniert :) – Dazzler

1

Lösung ist einfach: die Ergebnisse speichern und mit 2 separaten Schleifen (nimmt den Druck von innerhalb der Funktionen) drucken.

var program = function() 
{ 
    var binarySearchResults = []; 
    var sortedSearchResults = []; 
    var incrementSize = largestArray/numberOfArrays; 
    for (var i = smallestArray; i <= largestArray; i += incrementSize) 
    { 
     var randomArray = randomlyGenerateArray(i); 
     var sort = randomArray.sort(sortNumber); 
     var randomKey = 30; 
     binarySearchResults[i] = binarySearch(sort, randomKey); 
     sortedSearchResults[i] = searchSorted(sort, randomKey); 
    } 

    for (var i = smallestArray; i <= largestArray; i += incrementSize) 
    { 
     //print binary results 
    } 

    for (var i = smallestArray; i <= largestArray; i += incrementSize) 
    { 
     //print sorted results 
    } 

} 
+0

Die Art, wie ich den obigen Code geschrieben habe, besteht darin, den 'randomArray'-Code für beide Algorithmen wiederzuverwenden, wenn ich ihn aus der Schleife nehme, wird er kein Array unterschiedlicher Länge erzeugen. Ich muss Array unterschiedlicher Länge erstellen, bis die Bedingung für die Schleife erfüllt ist, und dann das gleiche Array wiederverwenden. – Dazzler

+0

In Ihrer obigen ersten Antwort erzeugt das 'randomGenerateArray (i)', wenn es außerhalb der Schleife genommen wird, kein Array mit unterschiedlichen Längen. Es wird mir einen nicht definierten Fehler geben. – Dazzler

+0

Oh, also brauchst du bei jedem Schritt ein neues Array? – Zero

Verwandte Themen