使用快速排序演算法對陣列進行升序排序的 Swift 程式
Swift 中的快速排序演算法是一種基於分治法的排序演算法。在這種排序中,我們首先透過選擇一個基準元素將陣列劃分為子陣列。這裡的劃分方式是這樣的:將最小的元素放置在基準元素的左側,將最大的元素放置在基準元素的右側。現在,使用相同的方法對左右子陣列也進行劃分。這個過程持續進行,直到所有子陣列都只包含一個元素。此時,陣列元素已排序,我們將其合併到一個數組中,並在輸出中顯示它們。因此,我們現在使用快速排序演算法對陣列進行升序排序。
演算法
步驟 1 − 建立一個函式,使用快速排序演算法對陣列進行升序排序。
步驟 2 − 在函式內部,首先檢查陣列的長度。如果它包含 0 或 1 個元素,則返回已排序的陣列。
步驟 3 − 從給定陣列的中間選擇基準元素。
步驟 4 − 篩選小於基準元素的元素
步驟 5 − 篩選等於基準元素的元素
步驟 6 − 篩選大於基準元素的元素
步驟 7 − 現在遞迴地對子陣列進行排序,並使用 + 運算子將它們連線到單個數組中。
步驟 8 − 呼叫函式並將陣列傳遞給它。
步驟 9 − 列印已排序的陣列。
示例
在以下示例中,我們將建立一個名為 quickSortAlgo() 的函式。此函式將陣列作為輸入,並藉助快速排序演算法將給定陣列排序為升序。然後,我們首先從陣列中選擇中間元素作為基準元素。然後將陣列劃分為三個子陣列,包含以下元素:小於基準元素的元素、大於基準元素的元素以及等於基準元素的元素。現在,我們遞迴地將快速排序應用於 lessEle 和 greaterEle,然後使用 + 運算子連線所有已排序的子陣列,最後以降序顯示已排序的陣列。
import Foundation
import Glibc
// Function to sort the array in ascending order using quick sort
func quickSortAlgo(arr: [Int]) -> [Int] {
// Array is already sorted if it has 0 or 1 elements
guard arr.count > 1 else { return arr }
// Select a pivot element in the middle
let pivotEle = arr[arr.count/2]
// Filter the elements that are less than the pivot
let lessEle = arr.filter { $0 < pivotEle }
// Filter the elements that are equal to the pivot element
let equalEle = arr.filter { $0 == pivotEle }
// Filter the elements that are greater than the pivot element
let greaterEle = arr.filter { $0 > pivotEle }
// Now recursively sort the sub-arrays and concatenate them into the single array
return quickSortAlgo(arr: lessEle) + equalEle + quickSortAlgo(arr: greaterEle)
}
let arr = [3, 6, 1, 8, 1, 56, 23, 12, 5]
let resultantArr = quickSortAlgo(arr: arr)
print("Sorted Array:", resultantArr)
輸出
Sorted Array: [1, 1, 3, 5, 6, 8, 12, 23, 56]
結論
因此,這就是我們如何使用快速排序演算法對陣列進行升序排序。在這裡,我們使用 filter(_:) 方法來實現快速排序,但您也可以使用其他方法。快速排序由於其分治法而輕鬆地解決了問題,但它具有最壞情況下的時間複雜度,即 O(n2)。它適用於大型資料集,但對於小型資料集來說不是一個好的選擇。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP