2016-05-30 5 views
0

2つのアルゴリズムのJavascriptファイルを作成しました。下のコードに示すように、私はfor loopを使用して両方のアルゴリズムで入力として使用されるランダムな値を生成します。別の関数の出力を表示する方法

現在のところ、binarySearchSearchSortedの出力を表示しています。

私が直面しています問題は、私は同じ配列が意味のある比較のために両方のアルゴリズムにメインプログラムrandomlyGenerateArrayによって生成値渡す必要があります。しかし、私は出力形式を変更する方法を知らない。

私はそれらを別々のループで追加することを考えましたが、私が上で説明したように、両方のアルゴリズムに同じrandomArray値を使用する必要があります。以下に示すように

すなわち、以下のコードは出力を生成します - 私は、バイナリ検索ファーストの出力を表示し、[検索ソートの出力を表示するにはどうすればよい

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

?それはこのようなものです。どんな助けでも大歓迎です。

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

はバイナリを分離し、2つのループに検索をソート。また、ちょっと明確にする、あなたは各ステップで新しい配列を生成するはずですか? – Zero

+0

両方のアルゴリズムの入力に同じ 'randomArray'を使用する必要があります。私がそれらを分離すると、もう一方のループに対して 'randomlyGenerateArray'をもう一度呼び出さなければなりません。そして、もう一方のループと同じ配列値を持たないでしょう。 – Dazzler

答えて

1

その後、各検索のためのforループを実行し、(私がsortedRandomArrays呼ばれてきた)配列のソートrandomArray Sを格納することができます。

メインプログラムは、次のようになります。

// 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

ありがとう、これは動作します:) – Dazzler

1

解決策は単純である:結果を格納し、2つの別個のループ(関数内から印刷を取る)で印刷します。

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

上記のコードを書いたやり方は、両方のアルゴリズムの 'randomArray'コードを再利用することです。ループから取り出すと、異なる長さの配列は作成されません。 forループ条件が満たされてから同じ配列を再利用するまで、異なる長さの配列を作成する必要があります。 – Dazzler

+0

上記の第1の答えでは、 'randomlyGenerateArray(i)'がループの外側にある場合、異なる長さの配列は作成されません。それは私に未定義のエラーを与えるでしょう。 – Dazzler

+0

ああ、各ステップで新しい配列が必要ですか? – Zero

関連する問題