算法:选择排序

算法 大约 1414 字

算法演进

  1. 假定第0位索引对应元素值最小。
  2. 第一次循环从第1位索引开始,与第0位索引对应的元素对比,如果第1位索引对应的元素比第0位索引对应的元素小,交换元素对应的值。
  3. 第二次循环从第2位索引开始,与第0位索引对应的元素对比,如果第2位索引对应的元素比第0位索引对应的元素小,交换元素对应的值。
  4. 第三次循环从第3位索引开始,与第0位索引对应的元素对比,如果第3位索引对应的元素比第0位索引对应的元素小,交换元素对应的值。
  5. 依此类推,重复array.length-1次循环。
[100 20 300 0]
第 1 次排序# [0 100 300 20]
第 2 次排序# [0 20 300 100]
第 3 次排序# [0 20 100 300]

演进示例代码

func SelectSortEvolution() {
    arr := []int{100, 20, 300, 0}

    // 假设arr[0]为最小值,从第二个元素开始遍历(计数都从1开始)
    for i := 1; i < len(arr); i++ {
        // 如果元素比第一个元素(第0位索引)大,则交换
        if arr[0] > arr[i] {
            temp := arr[0]
            arr[0] = arr[i]
            arr[i] = temp
        }
    }
    fmt.Println(arr)

    for i := 2; i < len(arr); i++ {
        // 如果元素比第二个元素(第1位索引)大,则交换
        if arr[1] > arr[i] {
            temp := arr[1]
            arr[1] = arr[i]
            arr[i] = temp
        }
    }
    fmt.Println(arr)

    for i := 3; i < len(arr); i++ {
        // 如果元素比第三个元素(第2位索引)大,则交换
        if arr[2] > arr[i] {
            temp := arr[2]
            arr[2] = arr[i]
            arr[i] = temp
        }
    }
    fmt.Println(arr)
}

选择排序代码

arr := []int{100, 20, 300, 0}

fmt.Println(arr)

for i := 0; i < len(arr)-1; i++ {
    for j := 1 + i; j < len(arr); j++ {
        if arr[i] > arr[j] {
            temp := arr[i]
            arr[i] = arr[j]
            arr[j] = temp
        }
    }
    fmt.Println("第", i+1, "次排序#", arr)
}
阅读 41 · 发布于 2021-02-05

————        END        ————

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

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