如何在 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 – 使用最小元素的索引,並將最小元素替換為 Infinity 值。
步驟 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;
}, []);
在上述語法中,我們從陣列中提取最小元素,將其推入陣列,將最小元素替換為 Infinity,並從 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,則執行 return 語句。
步驟 2 – 將 count 變數初始化為 0。
步驟 3 – 使用 for 迴圈迭代陣列,如果兩個元素未排序則交換元素。當我們交換元素時,將 count 的值增加 1。
步驟 4 – 如果 count 值為 0,則不再需要交換,並從函式返回。
步驟 5 – 透過將 index 值減 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() 方法,因為它是一種更高效的方法。對於大型陣列,遞迴方法可能會導致記憶體限制錯誤。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP