冒泡排序
基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。具体如下图所示:
golang代码实现
package main
import "fmt"
func bubbleSort(arr []int) []int {
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1; j++ {
if arr[j+1] < arr[j] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
}
func main() {
arr := []int{3, 6, 4, 2, 11, 10, 5}
fmt.Println(bubbleSort(arr))
}
上面代码有待优化的地方,例如:当数据的顺序排好之后,冒泡算法仍会执行,直到len(arr)-1次,而后面的比较是没有意义的。
解决方案,设置标志位flag,如果发生了交换,flag设置为true,没有交换,就设置为false。所以当一轮结束后,如果flag仍然为false,表明这一轮没有发生变化,说明数据的顺序已经排