如何在Node.js中不使用循环对数组进行排序

如何在Node.js中不使用循环对数组进行排序

在Node.js中,有一个内置的sort()方法可以方便地对数组进行排序。然而,作为初学者,为了了解sort()方法的内部工作原理,用户应该学习各种排序算法。

在本教程中,我们将学习一种在NodeJS中不使用循环对数组进行排序的不同算法。

使用setInterval()方法

setInterval()方法允许我们在每个时间间隔后调用任何特定的函数。此外,我们可以将setInterval()方法的id存储在任何变量中,并在以后使用它来清除时间间隔。

因此,我们可以在setInterval()方法中调用一个回调函数,该回调函数从数组中找到最小的元素,将其推入已排序的数组,并将最小的元素替换为Infinity值。

语法

用户可以按照下面的语法使用setInterval()方法来在NodeJS中不使用循环对数组进行排序。

let interval = setInterval(sort_callback, 2);

// in sort_callback() function
let min_from_array = Math.min.apply(null, array);
sorted_Array.push(min_from_array);
array[array.indexOf(min_from_array)] = Infinity;
if (++len == array.length) {
   clearInterval(interval);
} 

步骤

步骤1 - 每2秒使用setInterval()方法调用sort_callback()函数

步骤2 - 使用Math.min.apply()方法获取数组的最小元素

步骤3 - 将最小元素推入数组

步骤4 - 使用最小元素的索引,并将最小元素替换为无限大的值

步骤5 - 如果len变量的值等于数组的长度,则意味着所有数组元素都已排序,并使用setInterval()方法清除间隔以停止执行sort_callback()函数

示例

如下示例,我们创建了一个数字数组,并应用上述算法以升序排序数组。用户可以使用Math.max.apply()方法以降序对数组进行排序,并将负无穷大的值分配给最大元素。

let array = [10, 20, 45, 21, 32, 11, 9, 8, 65];
console.log("The original array is");
console.log(array);
let interval = setInterval(sort_callback, 2);
let len = 0;
let sorted_Array = [];
function sort_callback() {
   let min_from_array = Math.min.apply(null, array);
   sorted_Array.push(min_from_array);
   array[array.indexOf(min_from_array)] = Infinity;
   len++;
   if (len == array.length) {
      clearInterval(interval);
      console.log("The sorted array is");
      console.log(sorted_Array);
   }
}

使用array.reduce()方法

在每次array.reduce()方法的迭代中,我们可以不断从数组中提取最小元素,并将其推入sorted_array中。通过这种方式,一旦reduce()方法的执行完成,我们就可以得到排序后的数组。

语法

用户可以按照下面的语法在NodeJS中使用array.reduce()方法对数组进行排序,而不使用循环。

arr.reduce((sorted_Array, element) => {
   let min_from_array = Math.min.apply(null, arr);
   sorted_Array.push(min_from_array);
   arr[arr.indexOf(min_from_array)] = Infinity;
   return sorted_Array;
}, []);

在以上语法中,我们从数组中提取最小元素,将其推入数组中,并用无穷大替换最小元素,并从reduce()方法返回排序后的数组。

示例

在下面的示例中,sort_array()函数使用reduce()方法对数组进行排序。完成reduce()方法的迭代后,我们从函数中返回排序后的数组。

let arr = [
   100, 99, 32, 45, 6567898, 32, 123, 54, 7, 89, 745, 43, 34, 232, 121, 23, ];
console.log("The original array is " + arr);
function sort_array() {
   return arr.reduce((sorted_Array, element) => {
      let ind = 0;
      let min_from_array = Math.min.apply(null, arr);
      sorted_Array.push(min_from_array);
      arr[arr.indexOf(min_from_array)] = Infinity;
      return sorted_Array;
   }, []);
}
console.log("The sorted array is ", sort_array());

用户可以在输出中看到原始数组和排序后数组之间的差异。

使用递归解决方案

在这种方法中,我们将使用递归冒泡排序算法来对数组进行排序。冒泡排序算法使用两个循环来迭代数组,交换元素并对整个数组进行排序。

在这里,我们将用递归解决方案替换外层for循环。

语法

用户可以根据下面的语法实现递归冒泡排序算法。

function recursive_sort(array, index) {
   if (index == 1)
   return;
   var count = 0;
   for (var i = 0; i < index - 1; i++)

   // swap array elements if it’s not sorted
   return recursive_sort(array, index - 1);
}

步骤

步骤1 - 首先编写一个基本情况。如果索引变为1,执行返回语句。

步骤2 - 用0初始化计数变量。

步骤3 - 使用for循环遍历数组,如果两个元素没有排序,则交换它们。当我们交换元素时,将计数的值增加1。

步骤4 - 如果计数的值为0,则不需要再进行交换,并从函数中返回。

步骤5 - 通过将索引值减1并减少一次迭代来进行递归函数调用。

示例

在下面的示例中,我们使用递归冒泡排序函数来在NodeJS中对数组进行排序。我们使用临时变量来交换两个变量。

var arr = [613, 65, 654, 4, 65, 4, 61, 631, 6513, 89, 7, 97, 09, 98];
console.log("The original array is " + arr);
function recursive_sort(array, index) {

   // return statement for the base case
   if (index == 1) return;
   var count = 0;

   // swap elements that are not in sorted order
   for (var i = 0; i < index - 1; i++)
   if (array[i] > array[i + 1]) {
      var temp = array[i];
      array[i] = array[i + 1];
      array[i + 1] = temp;
      count++;
   }

   // if any swap does not occur, execute the return;
   if (count == 0) return;

   // call recursive_sort index-1 times, to swap element index-1 times
   return recursive_sort(array, index - 1);
}
recursive_sort(arr, arr.length);
console.log("The sorted array is ", arr);

在输出中,用户可以观察到数组已被交换。

用户学习了三种在NodeJS中不使用for循环对数组进行排序的不同方法。在不使用for循环的情况下,使用数组reduce()方法是最好的排序数组的方法,因为它是一种更高效的方法。对于大型数组,递归方法可能会导致内存限制错误。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程