-
Notifications
You must be signed in to change notification settings - Fork 0
/
sort.go
76 lines (70 loc) 路 1.65 KB
/
sort.go
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
package Alg_for_array
// All sorted
func Bubble_sort(array []int) { // bubble sort
for i := 0; i < len(array); i++ {
for j := 0; j < len(array)-1; j++ {
if array[j] > array[j+1] {
array[j], array[j+1] = array[j+1], array[j]
}
}
}
}
func Insertion_sort(array []int) { // insertion sort
for i := 0; i < len(array); i++ {
for j := i; j > 0; j-- {
if array[j] < array[j-1] {
array[j], array[j-1] = array[j-1], array[j]
}
}
}
}
func Selection_sort(array []int) { // selection sort
for i := 0; i < len(array); i++ {
min := i
for j := i + 1; j < len(array); j++ {
if array[j] < array[min] {
min = j
}
}
array[i], array[min] = array[min], array[i]
}
}
func Merge(left, right []int) []int { // merge sort
var result []int
for len(left) > 0 && len(right) > 0 {
if left[0] < right[0] {
result = append(result, left[0])
left = left[1:]
} else {
result = append(result, right[0])
right = right[1:]
}
}
result = append(result, left...)
result = append(result, right...)
return result
}
func Merge_sort(array []int) []int { // merge sort
if len(array) < 2 {
return array
}
mid := len(array) / 2
left := Merge_sort(array[:mid])
right := Merge_sort(array[mid:])
return Merge(left, right)
}
func Quick_sort(array []int) []int { // quick sort
if len(array) < 2 {
return array
}
pivot := array[0]
var left, right []int
for i := 1; i < len(array); i++ {
if array[i] < pivot {
left = append(left, array[i])
} else {
right = append(right, array[i])
}
}
return append(append(Quick_sort(left), pivot), Quick_sort(right)...)
}