版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/enjoy_sun_moon/article/details/83067791
//冒泡排序
func main(){
//第一种 描述:第一轮找出最大的放在最后的位置 第二轮找出第二大的放在第二的位置
arr := []int{2,4,7,8,12,3,9,1,54,5}
for i:=0;i<len(arr)-1;i++ { //主要控制循环的轮数 比切片少一个
//定义一个标记,判断本轮是否有两两换位 如果没有换位 那就说明排序正常 可以利用break跳出循环
flag : true
for j:=0;j<len(arr)-1-i;j++ { //主要控制一轮中相邻两个数比较的次数
if arr[j] > arr[j+1] {
arr[j],arr[j+1] = arr[j+1],arr[j]
//如果出现两两换位 那么说明换位还没结束 需要继续后续的循环
flag:=false
}
}
if flag {
break;
}
}
//总结 : i和j代表的是次数跟数组的下标无关
fmt.Println(arr)
//第二种 描述:第一轮先找出最小的放在第一的位置 第二轮找出第二小的放在第二的位置
arr1 := []int{2,4,7,8, 12,3,9,1,54,5}
for i:=0;i<len(arr1);i++ { //主要控制循环的轮数 跟元素个数相同
for j:=i+1;j<len(arr1);j++ { //与arr[i]之后的元素依次比较
if arr1[i] > arr1[j] {
arr1[i],arr1[j] = arr1[j],arr1[i]
}
}
}
//总结 : i和j代表的是数组的下表 与次数无关
fmt.Println(arr1)
}