【排序】選擇排序 Swift版本

版權聲明:本文爲 muhlenXi 原創文章,未經博主容許不得轉載,若有問題,歡迎指正。git

排序

排序就是將一組對象按照某種邏輯順序從新排列的過程。github

選擇排序

選擇排序(Selection Sort) 是一種簡單直觀的排序算法。算法

排序算法(默認是升序)的原理是這樣的。首先,找到數組中最小的那個元素,將它與數組中的第一個元素交換位置。(若是第一個元素就是最小元素,則本身和本身交換。)其次,在剩下的元素中找到最小的元素,將它與數組中的第二個元素交換位置。如此循環,直到將整個數組排序。swift

對於長度爲 n 的數組,選擇排序須要大約 n^2/2 次比較和 n 次交換。數組

算法實現

算法實現的源代碼能夠在這裏下載:傳送門ui

用 Swift 實現的選擇排序代碼以下所示:spa

/// 選擇排序
func selectionSort(unsortedArray: inout [Int]) {
    guard unsortedArray.count > 1 else {
        return
    }
    
    for i in 0 ..< unsortedArray.count {
        var minIndex = i
        for j in i+1 ..< unsortedArray.count {
            if unsortedArray[j] < unsortedArray[minIndex] {
                minIndex = j
            }
        }
        if minIndex != i {
            unsortedArray.swapAt(i, minIndex)
        }
    }
}
複製代碼

驗證算法

var list = [2, 3, 5, 7, 4, 8, 6 ,10 ,1, 9]
// 將會打印 [2, 3, 5, 7, 4, 8, 6 ,10 ,1, 9]
print(list) 
// 進行選擇排序
selectionSort(unsortedArray: &list)
// 將會打印 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list) 
複製代碼

算法分析

穩定性 :是穩定算法,由於排序過程當中相鄰會依次比較,不會打亂相同元素的相對位置。code

空間複雜度:整個排序過程是在原數組上進行排序的,因此是 O(1)。對象

時間複雜度:排序算法包含雙層嵌套循環,故爲 O(n^2)。排序

相關文章
相關標籤/搜索