2016-05-30 76 views
0

我已经写了两个算法的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

你可以存储在一个数组排序randomArray S(我已经叫sortedRandomArrays),然后运行一个循环为每个搜索。

主程序会再看看这样的:

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

在上面的第一个答案中,如果在循环外部采用'randomGenerateArray(i)',将不会创建不同长度的数组。它会给我一个未定义的错误。 – Dazzler

+0

哦,所以你需要每个步骤的新阵列? – Zero