冒泡算法 golang

冒泡算法

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。
之所以称之为冒泡是因为它有这样的动作。从第一个开始和相邻的做比较,如果大于相邻的点则交换,否则不作处理。这样子保证了大的那一个一般步步向上挪动,直到尾部这个过程就好像气泡向上冒一般所以称之为冒泡算法。

算法描述

比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

算法实现

以下使用golang实现,并且使用的是slice,并不是数组。内部的构造共享,所以此时不需要返回新的arr。

注意点

  • i 0 -> n-1 因为当n-1个有序的时候 整个数组其实已经有序了
  • j < arrLen-1 保证 j + 1 最大为arrLen - 1 否则越界

/*
    这里使用的是slice 内部的结构已经改变了 所以不需要return
    数组的话需要return 因为函数是值拷贝

    注意第二层循环的范围是 0 -> arrLen-i-1 初始的时候 i = 0
    则 j < arrLen - 1 保证 j + 1 最大为arrLen - 1 否则越界

*/
func BubbleSort(arr []int) {

    arrLen := len(arr)

    for i := 0; i < arrLen-1; i++ { // 冒泡的次数 n-1次冒泡
        for j := 0; j < arrLen-i-1; j++ { //要比较的范围 从 0 -> arrLen - i - 1 随着 i增大 尾部逐渐有序 冒泡
            if arr[j] > arr[j+1] {
                arr[j], arr[j+1] = arr[j+1], arr[j]
            }
        }
    }

}

测试

使用golang自带的测试方法

func TestBubbleSort(t *testing.T) {
    arr := []int{2,3,1,9,7,6,5}
    fmt.Printf("before Bubble Sort: %+v \n", arr)
    BubbleSort(arr)
    fmt.Printf("after Bubble Sort:%+v \n", arr)
}

打印结果

before Bubble Sort: [2 3 1 9 7 6 5] 
after Bubble Sort:[1 2 3 5 6 7 9] 

猜你喜欢

转载自blog.csdn.net/u012279631/article/details/80710077
今日推荐