2016-05-30 4 views
0

Я написал Javascript-файл из двух алгоритмов. Как показано в приведенном ниже коде, я использую for loop для генерации случайных значений, которые используются обоими алгоритмами в качестве входных данных.Как отобразить вывод одной функции за другой

В настоящее время я показываю вывод binarySearch и SearchSorted в качестве альтернативы.

Проблемы я столкнулся, я должен пройти же массив значений порожденных 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 с в массиве (который я назвал 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

В приведенном выше 1-м ответе 'randomlyGenerateArray (i)', если он выведен за пределы цикла, не будет создавать массив разной длины. Это даст мне неопределенную ошибку. – Dazzler

+0

О, так вам нужен новый массив с каждым шагом? – Zero

Смежные вопросы