JavaScript中保持首元素不變的整數陣列排序


在給定的問題陳述中,我們必須對給定的整數陣列進行排序,但必須保持第一個元素不變,並使用Javascript功能對其餘元素進行排序。因此,我們將使用Javascript的一些預定義函式來解決這個問題。

理解問題

目前的問題是在Javascript中獲得排序的整數陣列,此任務中的主要操作是保持第一個元素在其原始位置不變。或者我們可以說,我們必須重新排列陣列中的元素,以便它們以升序顯示,但第一個元素應位於陣列的第一個索引處。例如:假設我們有一個數組 [4, 7, 8, 5, 6, 1, 3],那麼在對陣列元素進行排序的同時保持第一個元素不變後,結果將是:[4, 1, 3, 5, 6, 7, 8]。

因此,我們的目標是設計一個演算法來執行上述操作。

給定問題的邏輯

為了在Javascript中對整數陣列進行排序,但保持第一個元素在相同位置,我們可以結合使用陣列切片和排序。因此,為了解決上述問題,我們將使用一種直接的方法。第一步,我們將陣列第一個元素的值儲存在一個單獨的變數中,以保護該元素。然後,我們將使用Javascript的標準排序預定義方法(例如sort方法)對整數陣列的其餘元素進行排序。

最後,我們將第一個元素和剩餘的排序後的元素組合回陣列中。使用此過程,我們可以實現排序整數陣列的同時保持第一個元素不變的預期結果。

演算法

步驟1:由於我們必須提供一個解決方案來對陣列元素進行排序,同時保持第一個元素不變。因此,我們將宣告一個名為sortKeepingFirstInPlace的函式,該函式將接受整數陣列作為輸入引數。

步驟2:眾所周知,我們必須將第一個元素保留在第一個位置。因此,為了完成此任務,我們將第一個元素儲存在一個單獨的變數中。此變數稍後將用於組合其餘元素。

步驟3:此步驟中的任務是使用sort方法對整數陣列的其餘元素進行排序,並在sort方法中使用比較函式將元素按升序排序。

步驟4:現在我們有了陣列的第一個元素和排序後的元素。在此步驟中,我們將第一個元素插入到陣列排序後元素的開頭,然後返回以顯示結果。

示例

function sortKeepingFirstInPlace(arr) {
   // Store the 1st element
   const firstElement = arr[0];

   // Sort the remaining elements
   const sortedArray = arr.slice(1).sort((a, b) => a - b);

   // Insert the 1st element at the beginning
   sortedArray.unshift(firstElement);

   return sortedArray;
}

const array = [30, 10, 40, 20, 50];
const sortedArr = sortKeepingFirstInPlace(array);
console.log(sortedArr);

輸出

[ 30, 10, 20, 40, 50 ]

複雜度

我們在程式碼中使用了一些Javascript的預定義方法,例如slice、sort和unshift。因此,此方法的時間複雜度分別為O(1)、O(n log n)和O(n)。因此,程式碼的近似時間複雜度為O(n log n),其中n是輸入陣列的大小。而程式碼的空間複雜度為O(n),因為我們正在使用記憶體來儲存陣列元素,並且陣列的大小為n。

結論

該程式碼已成功解決了給定的問題,時間複雜度為O(n log n)。此問題的核心任務是在保持第一個元素不變的情況下對元素進行排序。因此,我們還使用了一些Javascript的內建方法來獲得結果。

更新於:2023年8月16日

122 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告