正常版
每次寻找一个最小值并交换
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]