冒泡排序
原理:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
func BubbleSortV1(arr []int) []int {
length := len(arr)
if length <= 1 {
return arr
}
for i := 0; i < length-1; i++ {
for j := 0; j < length-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
fmt.Printf("第%d次:%v\n", i+1, arr)
}
return arr
}改进版本,添加一个标识,如果一直未发生交换说明是有序的,则不用继续循环。
func BubbleSortV2(arr []int) []int {
length := len(arr)
if length <= 1 {
return arr
}
for i := 0; i < length-1; i++ {
isChange := false
for j := 0; j < length-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
isChange = true
}
}
if !isChange {
break
}
fmt.Printf("第%d次:%v\n", i+1, arr)
}
return arr
}