经典排序算法的golang实现
冒泡排序

1 func (a Array) BubbleSort() {
2 for i := 0; i < len(a); i++ {
3 for j := 0; j < len(a)-i-1; j++ {
4 if a[j] > a[j+1] {
5 a[j], a[j+1] = a[j+1], a[j]
6 }
7 }
8 }
9 }
插入排序

1 func (a Array) InsertSort() {
2 for i := 0; i < len(a); i++ {
3 tmp := a[i]
4 j := i - 1
5 for j >= 0 && a[j] > tmp {
6 a[j+1] = a[j]
7 j--
8 }
9 a[j+1] = tmp
10 }
11 }
快速排序

1 func (a Array) QuickSort(left, right int) {
2 if left < right {
3 key := a[left]
4 low := left
5 high := right
6 for low < high {
7 for low < high && a[high] > key {
8 high--
9 }
10 a[low] = a[high]
11 for low < high && a[low] < key {
12 low++
13 }
14 a[high] = a[low]
15 }
16 a[low] = key
17 a.QuickSort(left, low-1)
18 a.QuickSort(low+1, right)
19 }
20 }
完整代码
1 package main
2
3 type Array []int32
4
5 func (a Array) BubbleSort() {
6 for i := 0; i < len(a); i++ {
7 for j := 0; j < len(a)-i-1; j++ {
8 if a[j] > a[j+1] {
9 a[j], a[j+1] = a[j+1], a[j]
10 }
11 }
12 }
13 }
14 func (a Array) InsertSort() {
15 for i := 0; i < len(a); i++ {
16 tmp := a[i]
17 j := i - 1
18 for j >= 0 && a[j] > tmp {
19 a[j+1] = a[j]
20 j--
21 }
22 a[j+1] = tmp
23 }
24
25 }
26 func (a Array) QuickSort(left, right int) {
27 if left < right {
28 key := a[left]
29 low := left
30 high := right
31 for low < high {
32 for low < high && a[high] > key {
33 high--
34 }
35 a[low] = a[high]
36 for low < high && a[low] < key {
37 low++
38 }
39 a[high] = a[low]
40 }
41 a[low] = key
42 a.QuickSort(left, low-1)
43 a.QuickSort(low+1, right)
44 }
45 }
46 func main() {
47 var a Array = []int32{1, 5, 2, 6, 3, 9, 7, 4}
48
49 //a.Bubble()
50 //a.Insert()
51 a.QuickSort(0, len(a)-1)
52 for _, i := range a {
53 print(i)
54 }
55
56 }