算法:冒泡排序

算法 大约 1928 字

算法演进

  1. 第一次从数组第0位索引开始遍历到数组最后一位将最大值置换至最后一位。
  2. 第二次从数组第0位索引开始遍历到数组最后第二位将最大值置换至最后第二位。
  3. 第三次从数组第0位索引开始遍历到数组最后第三位将最大值置换至最后第三位。
  4. 依此类推,重复array.length-1次循环。
[3 9 -1 10 -2]
第 1 次排序结果# [3 -1 9 -2 10]
第 2 次排序结果# [-1 3 -2 9 10]
第 3 次排序结果# [-1 -2 3 9 10]
第 4 次排序结果# [-2 -1 3 9 10]

演进示例代码

func Evolution() {
    arr := []int{3, 9, -1, 10, -2}
    fmt.Println(arr)

    var temp = 0
    for i := 0; i < len(arr)-1; i++ {
        if arr[i] > arr[i+1] {
            temp = arr[i+1]
            arr[i+1] = arr[i]
            arr[i] = temp
        }
    }

    fmt.Println(arr)

    for i := 0; i < len(arr)-1-1; i++ {
        if arr[i] > arr[i+1] {
            temp = arr[i+1]
            arr[i+1] = arr[i]
            arr[i] = temp
        }
    }

    fmt.Println(arr)

    for i := 0; i < len(arr)-1-2; i++ {
        if arr[i] > arr[i+1] {
            temp = arr[i+1]
            arr[i+1] = arr[i]
            arr[i] = temp
        }
    }

    fmt.Println(arr)

    for i := 0; i < len(arr)-1-3; i++ {
        if arr[i] > arr[i+1] {
            temp = arr[i+1]
            arr[i+1] = arr[i]
            arr[i] = temp
        }
    }

    fmt.Println(arr)
}

冒泡排序代码

arr := []int{3, 9, -1, 10, -2}
fmt.Println(arr)

var temp = 0
for i := 0; i < len(arr)-1; i++ {
    for j := 0; j < len(arr)-1-i; j++ {
        if arr[j] > arr[j+1] {
            temp = arr[j+1]
            arr[j+1] = arr[j]
            arr[j] = temp
        }
    }
    fmt.Println("第",i+1, "次排序结果#",arr)
}

优化后代码

增加判断:如果未发生过交换,则说明数组已经有序,可以结束程序。

arr := []int{-2, 3, 9, -1, 10}
fmt.Println(arr)

var temp = 0

for i := 0; i < len(arr)-1; i++ {
    exchange := false
    for j := 0; j < len(arr)-1-i; j++ {
        if arr[j] > arr[j+1] {
            temp = arr[j+1]
            arr[j+1] = arr[j]
            arr[j] = temp
            exchange = true
        }
    }
    fmt.Println("第",i+1, "次排序结果#",arr)
    if !exchange {
        break
    }
}
阅读 164 · 发布于 2021-02-04

————        END        ————

扫描下方二维码关注公众号和小程序↓↓↓

扫描二维码关注我
昵称:
随便看看 换一批