冒泡排序
...大约 2 分钟
冒泡排序
基本思想
通过对待排序序列从前往后,依次对相邻的两个元素进行比较大小,按照升序的顺序进行排列。从而呈现较大的元素逐渐移向后部,就像水底的气泡一样逐渐往顶部冒。
实例演示
待排序的数组: 1,5,3,-7,9
第一轮排序:
(1)1,5,3,-7,9 ---- 1跟5比较,不交换
(2)1,3,5,-7,9 ---- 5跟3比较,交换
(3)1,3,-7,5,9 ---- -7跟5比较,交换
(4)1,3,-7,5,9 ---- 5跟9比较,交换
第一轮过后,最大数 9 “冒” 到了最后面
第二轮排序:
(1)1,3,-7,5,9 ---- 1跟3比较,不交换
(2)1,-7,3,5,9 ---- 3跟-7比较,交换
(3)1,-7,3,5,9 ---- 3跟5比较,不交换
第二轮过后,数字5 “冒” 到了倒数第二个位置
第三轮排序:
(1)-7,1,3,5,9 ---- 1跟-7比较,交换
(2)-7,1,3,5,9 ---- 1跟3比较,不交换
第三轮过后,数字 3 “冒” 到了倒数第三个位置
第四轮排序:
(1)-7,1,3,5,9 ---- -7跟1比较,不交换
第四轮过后,已经排好了五个数中的四个数,那么最后一个数自然也是有序的了
小结
设总的元素个数为n,那么由上边的排序过程可以看出:
(1)总计需要进行(n-1)轮排序,也就是(n-1)次大循环
(2)每轮排序比较的次数逐轮减少
代码部分
func maoPao(arr []int) []int {
var tmp int //用于临时储存
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
tmp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = tmp
}
}
}
return arr
}
func main() {
arr := []int{10, 8, -7, 9, 5, 4, -3, 2, 1}
fmt.Println(maoPao(arr))
}