一、基本介绍
- 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。
- 抽象理解
- 班里学生排队,个高的在最后个小在最前
- 首先在一个参差不齐的队列里
- 以第一个学生为准让他和后面的每一个学生进行比对
- 当发现有比自己个高的时候,自己出来让这个比自己高的人和下一个比较(里层循环)
- 直到比完挑选出本轮最高的人
- 接下来在剩余的人里进行重复的操作,直到排完位置(外层循环)
二、演示冒泡过程的例子(图解)
![](https://img-blog.csdnimg.cn/20200616210345471.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM4MDA0NjE5,size_16,color_FFFFFF,t_70)
三、冒泡排序代码实现
package main
import "fmt"
//分析冒泡排序
func BubbleSort(arr *[5]int){
fmt.Println("排序前",(*arr))
tmp := 0 //定义临时变量
flag := false; // 标识变量,表示是否进行过交换
for j :=0 ; j < len(arr)-1 ;j++{
//多次循环遍历的时候i是越来越小,j是增大的 用len(arry)-i-j实现遍历
for i := 0 ;i< len(arr)-1-j; i++{
if arr[i] > arr[i+1] {
flag = true
tmp = arr[i]
arr[i] = arr[i+1]
arr[i+1] = tmp
}
}
if !flag { // 在一趟排序中,一次交换都没有发生过
break;
} else {
flag = false; // 重置 flag!!!, 进行下次判断
}
}
fmt.Println("排序后",(*arr))
}
var arr2 [5]int = [5]int{24,69,80,57,13}
func main() {
BubbleSort(&arr2) //传入数组的地址
}