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步 - 使用setInterval()方法,在每2秒后调用sort_callback()函数。

第 2 步 – 使用Math.min.apply()方法从数组中获取最小元素。

第 3 步–将最小元素推到数组中。

第 4 步 – 使用最小元素的索引,用无穷大的值替换最小元素。

第 5 步 – 如果len变量的值等于数组的长度,这意味着所有数组元素都被排序了,并通过setInterval()方法清除间隔以停止执行sort_callback()函数。

例子

在下面的例子中,我们已经创建了数字数组,并应用上述算法对数组进行升序排序。用户可以使用Math.max.apply()方法对数组进行降序排序,并为最大元素分配负的Infinity值。

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()方法执行完毕,我们就可以得到排序后的数组。

语法

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

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步 - 将count变量初始化为0。

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

第4 步 – 如果count值为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循环对数组进行排序的最好方法是使用array.reduce()方法,因为它是一种更有效的方法。递归方法对于大的数组会出现内存限制的错误。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程