008_用go语言实现简单的冒泡排序

冒泡排序是各个语言中的基本排序算法,本次我们用go语言实现简单的冒泡排序

package main

import "fmt"

// [13,10,5,7,2]
// [10,13,5,7,2]
// [10,5,13,7,2]
// [10,5,7,13,2]
// [10,5,7,2,13]

func bubble_sort(a []int) {
	for i := len(a) - 1; i > 0; i-- {
		for j := 0; j < i; j++ {
			if a[j] > a[j+1] {
				a[j], a[j+1] = a[j+1], a[j]
			}
		}
	}
}

func main() {
	a := []int{13, 10, 5, 7, 2}
	bubble_sort(a)
	fmt.Println(a)
}

  

代码运行后,可以看到排序完成

[2 5 7 10 13]

  

让我们来分析上面的代码。冒泡排序整个的逻辑就是,让第一个与第二个比较,然后交换位置,第二个与第三个比较,然后交换位置。最终将最大的冒泡到切片的最右侧。接着,再冒泡一轮,从第二轮冒泡开始,最右侧的数不用比较了,接着第三轮,直到最左侧两个数交换完毕为止。

所以在代码中,我们设置了两层循环。第一层的循环,是比较的轮数,第二层循环,是在每一轮中,每一个数的比较。所以第一层循环的i的取值范围就是len(a)-1,即4,然后每一次减1,最后一轮只有第一个数和第二个数比较。第二层循环的取值范围,是根据第一层循环来的,也是每一轮减1,所以当最后一轮比较时,只剩下两个数了。

posted @ 2018-05-08 17:11  Joestar  阅读(278)  评论(0编辑  收藏  举报