选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| package main
import (
"fmt"
"math/rand"
"time"
)
const (
num = 10
rangeNum = 10
)
func main() {
randSeed := rand.New(rand.NewSource(time.Now().Unix() + time.Now().UnixNano()))
var buf []int
for i := 0; i < num; i++ {
buf = append(buf, randSeed.Intn(rangeNum))
}
t := time.Now()
// 选择排序
Choice(buf)
fmt.Println(buf)
fmt.Println(time.Since(t))
}
// 选择排序
func Choice(buf []int) {
times := 0
for i := 0; i < len(buf)-1; i++ {
min := i
for j := i; j < len(buf); j++ {
times++
if buf[min] > buf[j] {
min = j
}
}
if min != i {
tmp := buf[i]
buf[i] = buf[min]
buf[min] = tmp
}
}
fmt.Println("Choice times: ", times)
}
|
1
2
3
4
| midoksdeMacBook-Pro:test midoks$ go run choice.go
Choice times: 54
[0 1 2 2 2 4 6 6 8 9]
54.333µs
|