直接上代码:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
package
sort
//直接插入排序
func DirectInsertSort(array []
int
) []
int
{
len := len(array)
var tmp, j
int
for
i :=
1
; i < len; i++ {
if
array[i] < array[i-
1
] {
tmp = array[i]
for
j = i -
1
; tmp < array[j]; j-- {
array[j+
1
] = array[j]
}
array[j+
1
] = tmp
}
}
return
array
}
//折半插入排序
func BinaryInsertSort(array []
int
) []
int
{
var tmp, low, high, mid
int
len := len(array)
for
i :=
1
; i < len; i++ {
tmp = array[i]
low, high =
0
, i-
1
for
low <= high {
mid = (low + high) /
2
if
array[mid] > array[i] {
high = mid -
1
}
else
{
low = mid +
1
}
}
for
j := i -
1
; j >= high+
1
; j-- {
array[j+
1
] = array[j]
}
array[high+
1
] = tmp
}
return
array
}
//冒泡排序
func BubbleSort(array []
int
) []
int
{
len := len(array)
for
i :=
0
; i < len-
1
; i++ {
for
j := len -
1
; j > i; j-- {
if
array[j-
1
] > array[j] {
array[j-
1
], array[j] = array[j], array[j-
1
]
}
}
}
return
array
}
//简单选择排序
func SelectSort(array []
int
) []
int
{
len := len(array)
for
i :=
0
; i < len-
1
; i++ {
for
j := len +
1
; j < len; j++ {
if
array[j-
1
] > array[j] {
array[j-
1
], array[j] = array[j], array[j-
1
]
}
}
}
return
array
}
//快速排序
func QuickSort(array []
int
) []
int
{
quickSort(array,
0
, len(array)-
1
)
return
array
}
func quickSort(array []
int
, left, right
int
) {
if
left < right {
pivotPosition := partition(array, left, right)
quickSort(array, left, pivotPosition-
1
)
quickSort(array, pivotPosition+
1
, right)
}
}
func partition(array []
int
, left, right
int
)
int
{
pivot := array[left]
for
left < right {
for
left < right && array[right] > pivot {
right--
}
array[left] = array[right]
for
left < right && array[left] <= pivot {
left++
}
array[right] = array[left]
}
array[left] = pivot
return
left
}
|
本文转自 ponpon_ 51CTO博客,原文链接:http://blog.51cto.com/liuxp0827/1388684,如需转载请自行联系原作者