随笔 - 13  文章 - 0 评论 - 0 trackbacks - 0

冒泡排序,是稳定排序,时间复杂度是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)
}

   
posted on 2019-05-28 17:41  yiyezhou2012  阅读(98)  评论(0编辑  收藏