版權聲明:本文爲 muhlenXi 原創文章,未經博主容許不得轉載,若有問題,歡迎指正。git
排序就是將一組對象按照某種邏輯順序從新排列的過程。github
選擇排序(Selection Sort) 是一種簡單直觀的排序算法。算法
排序算法(默認是升序)的原理是這樣的。首先,找到數組中最小的那個元素,將它與數組中的第一個元素交換位置。(若是第一個元素就是最小元素,則本身和本身交換。)其次,在剩下的元素中找到最小的元素,將它與數組中的第二個元素交換位置。如此循環,直到將整個數組排序。swift
對於長度爲 的數組,選擇排序須要大約
次比較和
次交換。數組
算法實現的源代碼能夠在這裏下載:傳送門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()。對象
時間複雜度
:排序算法包含雙層嵌套循環,故爲 O()。排序