冒泡排序原理
1.對需要排序的數據,倆倆進行比較,小的放前面,大的放后面
2.依次對每一對相鄰的數據作步驟1的工作,當排序到最后一個元素的時候,我們能保證這個數據是最大。
3.針對所有的元素重復以上的步驟,除了最后一個(這里為什么需要針對除了最后一個元素的全部元素做一次呢,因為最后一個元素已經是最大的不需要排序了,同時,由于元素的交換,交換上來的元素的大小不一定比前面的元素的大,所以需要再做一次)。
4持續對越來越少的元素重復3的步驟,直到沒有任何一對元素需要比較。
時間復雜度
- 我們一般談最壞時間復制度
n(n-1)/2 = O(n2)
算法穩定性
- 相同元素的前后順序并沒有改變,所以是一種穩定排序算法
swfit代碼
import UIKit
import Foundation
var array = [Int](count:20,repeatedValue: 0)
for index in 0..<20 {
array[index] = Int(arc4random_uniform(20)) + 1
}
print("排序前的值")
print(array)
for item in array
{
var ii = item
print(ii)
}
for i in 0 ..< array.count {
for j in 0 ..< array.count - 1 - i {
if array[j] > array[j+1] {
var temp = array[j+1]
array[j+1] = array[j]
array[j] = temp
}
}
}
print("排序后的值")
print(array)
for item in array
{
var ii = item
print(ii)
}
值變化圖
在playground中我們可以看見值變化情況
排序前.png
第一次兩兩比較完.png
此時最大的數已經到了最后,后面就不需要比較了
第二次兩兩比較完..png
此時第二大的數已經到了倒數第二位,后面就不需要比較了
排序完成.png