冒泡排序,是稳定排序,时间复杂度是O(N2)。
算法稳定性:假设在数列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。则这个排序算法是稳定的!
代码实现:
func main() {
a := []int{10, 5, 2, 9, 8, 6, 7}
BubbleSort(a)
}
func BubbleSort(a []int) {
length := len(a)
for i:=0; i<length-1; i++ { //最外层为排序趟数
for j:=0; j<length-1-i; j++ {
if a[j] > a[j+1] {
a[j], a[j+1] = a[j+1], a[j]
}
}
}
fmt.Println("冒泡排序结果:", a)
}
优化方案:
减少比较次数
func BubbleSortOptimization(a []int) {
length := len(a)
last_change := 0
num := 0
//已经排好序的没必要重新排序了
for i:=0; i<length-1; i++ {
broken := true
for j:=last_change; j<length-1-i; j++ {
if a[j] > a[j+1] {
a[j], a[j+1] = a[j+1], a[j]
if broken {
last_change = j
}
broken = false
}
num ++
}
if broken {
break
}
}
fmt.Println("冒泡排序结果:", a, num)
}