在 JavaScript 中將數字陣列排序成集合


在給定的問題陳述中,我們被要求將數字陣列排序成一些集合,其中陣列是由使用者提供的輸入源,從蠻力方法到最佳化的解決方案。

什麼是 JavaScript 中的陣列?

如果您熟悉其他程式語言,例如 C、C++ 或 Java,您一定聽說過“陣列”這個術語。

在程式設計中,陣列是在一個屋簷下收集相似資料元素。

現在,一個重要的問題出現了:如果陣列在所有語言中通常都是相同的,那麼 JavaScript 如何使陣列更獨特和可用?

讓我們瞭解 JavaScript 中陣列的整體工作原理。

陣列是一個儲存多個元素的物件。由於陣列也是一個物件,因此它具有一些屬性和方法,使在 JavaScript 中處理陣列更容易。

示例

以下是 JavaScript 中定義陣列的語法:-

const arrayExample  = [ 100 , 200 , 500 ,600 ];
console.log(arrayExample);

輸出

[ 100, 200, 500, 600 ]

什麼是 JavaScript 中的 sort 方法?

javascript 中的 sort 方法會就地排序陣列,並預設按升序生成排序後的陣列。但是 JavaScript 語言在這裡有一個陷阱,它首先將您要排序的每個元素轉換為字串資料型別,然後執行排序。

在 JavaScript 中,sort 方法在幕後不僅執行像許多其他程式語言那樣用於排序的比較,而且一旦每個元素最初轉換為字串,這些轉換完全基於 UTF-16,然後是元素在轉換時的順序,決定了 JavaScript 中 sort 方法的排序引數。UTF-16 允許在您的域中使用更多字元和表情符號,因此希望進行高效且大規模的排序。

此示例將使您更好地理解 Javascript 中的 sort 方法

const arrOfNumbers = [ 10 , 5 , 1 ] ;

console.log(arrOfNumbers.sort());

Expected Output 
[ 1 , 5 , 10 ] 

Real Output 

[ 1, 10, 5 ]

輸出看起來很奇怪,對吧?因為這是由於 javascript 的字串轉換步驟,排序在幕後是如何工作的。在這裡,排序可以有效地處理字串資料型別。

const strOfNumbers = ['c', 'z', 'a'];
console.log(strOfNumbers.sort());
Expected Output 
[ 'a', 'c', 'z' ]
Real Output 
[ 'a', 'c', 'z' ]

這就是應該理解問題陳述的重點所在,因為我們需要首先對數字陣列進行排序,然後將其放入集合資料結構中。

數字陣列的排序

對數字陣列進行排序需要一個名為 compare() 的輔助函式,該函式根據數字資料型別比較和對比陣列中存在的數字。

比較函式可以返回負數、零或正數,這可以成為排序演算法的基礎。

此示例將使您更好地理解在 Javascript 中應用於數字資料型別的 sort 方法

const arrOfNumbers = [10, 5, 1];
console.log(arrOfNumbers.sort((x, y) => x - y));
Expected Output 
[ 1, 5, 10 ]
Real Output 
[ 1, 5, 10 ]

什麼是 JavaScript 中的 Set?

JavaScript 中的 Set 引入於 es6,它是一個元素集合,其中 Set 中存在的每個元素都必須維護其唯一性,並丟棄重複項。此外,Set 不會以您新增元素的方式維護元素的順序,因為 Set 不會維護索引屬性來支撐元素的順序。

示例

以下示例說明了 Set

const setStringArray = new Set("javascript");
console.log(setStringArray);

輸出

Set { 'j', 'a', 'v', 's', 'c', 'r', 'i', 'p', 't' }

示例

以下示例說明了 Set

const setNumberArray = new Set ( [ 1,2,3 ] );
console.log(setNumberArray);

輸出

Set { 1, 2, 3 }

問題陳述談到了 Set 與數字的關係,請注意 sort 方法不能直接作用於 Set,在這種情況下,我們需要間接地工作,首先對數字陣列進行排序,然後將陣列轉換為 JavaScript 中的 Set。

演算法

步驟 1:宣告一個名為 sortedArrayInSet 的主函式,該函式將數字陣列作為輸入

步驟 2:獲取數字陣列,將由另一個名為 sortArray 的輔助函式進行排序,該函式是一個自定義函式,用於如上所述對數字陣列進行排序,javascript 中的排序是如何在幕後工作的。

步驟 3:因為 Set 不能直接排序,所以我們首先將數字陣列作為輸入,對其執行排序機制,然後將排序後的數字陣列使用 new Set() 功能轉換為 Set 資料型別。

步驟 4:結果是 JavaScript 中數字陣列排序成 Set。

示例

function sortArray ( num1 , num2 )
{
  return num1 - num2 ;
};

function sortedArrayInSet ( arr )
{
   const finalSortedArray = arr.sort(sortArray);
   const finalSortedSet= new Set(finalSortedArray);
   console.log("sorted array of numbers into set " , finalSortedArray);
}

const arrOfNumbers = [ 20000 , 12 , -9 , 23 , 100 , -76 ];
sortedArrayInSet(arrOfNumbers);

輸出

sorted array of numbers into set :  [ -76, -9, 12, 23, 100, 20000 ]

以下提到的程式碼是檢視問題陳述時可以想到的直接程式碼,稍後當然可以將其最佳化到更好的空間和時間質量,使其更有效率和高質量。

在上面的程式碼中,我們聲明瞭一個接收陣列輸入的函式。然後我們通過了解排序機制並首先使用自定義函式對數字陣列進行排序,然後將其轉換為解決您可能需要的某個問題陳述的 Set 來間接進行操作。

時間複雜度

Array.sort() 方法基於時間排序演算法,時間複雜度為 O(n log n),在最壞情況下,時間複雜度變為 O(n^2)。

結論

這就是我們如何透過邏輯思考和編碼上下文解決上述問題陳述,利用 javascript 方法 sort 和資料型別 set 在其最有效的用例中。

更新於:2023-08-22

194 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告