go --- 冒泡排序

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)
}

猜你喜欢

转载自blog.csdn.net/enjoy_sun_moon/article/details/83067791