核心原理:
比较相邻的两个元素,较大的一个交换移动到右边
优化:
已经排好序的元素不再进行比较,减少比较次数
下面函数的变量flag 用于判断后续元素有无发生交换,没有发生交换的直接停止遍历
变量lastSwapIndex ,记录最后一次发生交换的位置,后续元素不再进行比较
//冒泡排序
func BubbleSort(arr *[]int){
flag:=true
lastSwapIndex:=0
for i:=0;i<len(*arr)-1;i++{
sortBorder:=len(*arr)-1-i
for j:=0;j<sortBorder;j++{
if (*arr)[j]>(*arr)[j+1]{
temp:=(*arr)[j]
(*arr)[j]=(*arr)[j+1]
(*arr)[j+1]=temp
flag=false
lastSwapIndex=j
}
}
sortBorder=lastSwapIndex
if flag{
break
}
}
}