001

正常版

每次寻找一个最小值并交换


package main

import "fmt"

func main() {
	var arr = []int{5, 3, 8, 6, 1, 8, 6, 1, 7}
	fmt.Printf("arr: %v\n", arr)

	for i := 0; i < len(arr)-1; i++ {
		var minPos = i

		for j := i + 1; j < len(arr); j++ {
			if arr[j] < arr[minPos] {
				minPos = j
			}
		}
		swap(arr, i, minPos)

		fmt.Printf("arr: %v\n", arr)
	}

}
func swap(arr []int, a, b int) {
	var temp = arr[a]
	arr[a] = arr[b]
	arr[b] = temp
}

输出结果


arr: [5 3 8 6 1 8 6 1 7]
arr: [1 3 8 6 5 8 6 1 7]
arr: [1 1 8 6 5 8 6 3 7]
arr: [1 1 3 6 5 8 6 8 7]
arr: [1 1 3 5 6 8 6 8 7]
arr: [1 1 3 5 6 8 6 8 7]
arr: [1 1 3 5 6 6 8 8 7]
arr: [1 1 3 5 6 6 7 8 8]
arr: [1 1 3 5 6 6 7 8 8]
arr: [1 1 3 5 6 6 7 8 8]

优化

同时找出最小值与最大值


package main

import "fmt"

func main() {
	var arr = []int{9, 7, 6, 8, 4, 1, 5, 2, 3}
	fmt.Printf("arr: %v\n", arr)

	for i := 0; i < len(arr)/2; i++ {
		var minPos = i
		var maxPos = len(arr) - i - 1

		for j := i + 1; j < len(arr)-i; j++ {
			if arr[j] < arr[minPos] {
				minPos = j
			}
		}
		swap(arr, i, minPos)
		for j := len(arr) - i - 1; j > i; j-- {
			if arr[j] > arr[maxPos] {
				maxPos = j
			}
		}
		swap(arr, len(arr)-i-1, maxPos)
		fmt.Printf("arr: %v\n", arr)
	}

}

func swap(arr []int, a, b int) {
	var temp = arr[a]
	arr[a] = arr[b]
	arr[b] = temp
}

输出结果


arr: [9 7 6 8 4 1 5 2 3]
arr: [1 7 6 8 4 3 5 2 9]
arr: [1 2 6 7 4 3 5 8 9]
arr: [1 2 3 5 4 6 7 8 9]
arr: [1 2 3 4 5 6 7 8 9]