冒泡排序就是把小的元素往前调或者把大的元素日后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。因此,若是两个元素相等,我想你是不会再无聊地把他们俩交换一下的;算法
若是两个相等的元素没有相邻,那么即便经过前面的两两交换把两个相邻起来,这时候也不会交换,因此相同元素的先后顺序并无改变,因此冒泡排序是一种稳定排序算法 图解 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)
}
复制代码