冒泡排序就是把小的元素往前調或者把大的元素日後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。因此,若是兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;算法
若是兩個相等的元素沒有相鄰,那麼即便經過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,因此相同元素的先後順序並無改變,因此冒泡排序是一種穩定排序算法 圖解 bash
func sort() {
var arr = [3,6,4,2,11,10,5]
for i in 0..<arr.count {
for j in 0..<arr.count-1-i {
if arr[j] > arr[j+1] {
arr.swapAt(j, j+1)
}
}
print(arr)
}
print(arr)
}
複製代碼
func sort() {
var arr = [3,6,4,2,11,10,5]
for i in 0..<arr.count {
var isSort = true
for j in 0..<arr.count-1-i {
if arr[j] > arr[j+1] {
arr.swapAt(j, j+1)
isSort = false
}
}
if isSort {
break
}
print(arr)
}
print(arr)
}
複製代碼
既然總體數列會提早有序,那麼當數列部分有序時,冒泡排序還傻傻的以步長1,不斷的進行循環。優化
func sort() {
var arr = [3,6,4,2,11,10,5]
var len = arr.count - 1
var endIndex = 0
for _ in 0..<arr.count {
var isSort = true
for j in 0..<len {
if arr[j] > arr[j+1] {
arr.swapAt(j, j+1)
isSort = false
endIndex = j
}
}
if isSort {
break
}
len = endIndex
print(arr)
}
print(arr)
}
複製代碼