JavaScript 奇偶元素分別排序


在本題中,我們需要藉助 Javascript 功能分別對奇數和偶數元素進行排序。為此,我們將使用 for 迴圈和氣泡排序法分別對奇數和偶數進行排序。

理解題意

題意是編寫一個 Javascript 函式,用於對給定陣列中的奇數和偶數進行排序。例如,如果我們有一個數組 [2, 3, 5, 4],我們將首先對偶數索引元素 [3, 4] 進行排序,然後對陣列中奇數索引元素 [2, 5] 進行排序。排序這兩個子陣列後,我們將合併這兩個陣列以獲得最終排序後的陣列。

解決問題的邏輯

為了對元素進行排序,我們將使用氣泡排序法分別對偶數索引和奇數索引元素進行排序。因此,在迴圈的每次迭代中,我們將把交換值設定為 false。如果我們進行交換,則將其設定為 true。然後,我們將遍歷奇數索引陣列並執行相同的過程,如果第一個元素大於第二個元素,則將交換設定為 true。最後,我們對陣列進行了排序。

演算法

步驟 1 − 宣告一個名為 sortOddEven 的函式,該函式使用長度為 n 的陣列引數。

步驟 2 − 使用氣泡排序演算法分別對偶數索引和奇數索引元素進行排序。

步驟 3 − 遍歷陣列的元素。然後將 swapped 設定為 false。

步驟 4 − 遍歷偶數索引元素,並比較每一對偶數索引元素,如果它們順序錯誤,則交換它們。如果我們交換了專案,則將 swapped 設定為 true。

步驟 5 − 然後遍歷奇數索引元素,並比較從索引 1 開始的每一對奇數,如果它們順序錯誤,則交換它們。如果我們交換了專案,則將 swapped 值設定為 true。

步驟 6 − 重複步驟四和五,直到迭代中不需要任何交換。

步驟 7 − 返回包含輸入陣列所有排序元素的最終結果陣列。

演算法程式碼

//function to get sorted elements of the array
function sortOddEven(arr) {
   const n = arr.length;
   let swapped;
   do {
      swapped = false;
      // sort even elements
      for (let i = 0; i < n - 1; i += 2) {
         if (arr[i] > arr[i + 2]) {
            [arr[i], arr[i + 2]] = [arr[i + 2], arr[i]];
            swapped = true;
         }
      }
      // sort odd elements
      for (let i = 1; i < n - 1; i += 2) {
         if (arr[i] > arr[i + 2]) {
            [arr[i], arr[i + 2]] = [arr[i + 2], arr[i]];
            swapped = true;
         }
      }
   } while (swapped);
   return arr;
}
const arr = [9, 2, 7, 4, 5, 6, 3, 8, 1];
console.log(sortOddEven(arr));

複雜度

氣泡排序演算法的時間複雜度為 O(n^2),其中 n 是陣列的長度。但我們分別對偶數索引和奇數索引項進行排序,因此實際的比較和交換次數是其大小的一半,因此演算法的實際時間複雜度等於 O(n)。

結論

在上面的程式碼中,我們實現了一個解決方案,透過分別對 Javascript 中的偶數和奇數索引元素進行排序來獲得排序後的陣列。它簡單易懂。並且該演算法適用於小型陣列,而不適用於大型陣列。

更新於:2023年5月18日

793 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.