-
Notifications
You must be signed in to change notification settings - Fork 56
Expand file tree
/
Copy pathsort.go
More file actions
130 lines (89 loc) · 1.77 KB
/
Copy pathsort.go
File metadata and controls
130 lines (89 loc) · 1.77 KB
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//
// The Algorithm Museum
// https://gcallah.github.io/algorithms/AlgorithmMuseum.html
//
// section: Getting Started
// author: rdodson
// created: Sun Feb 26 09:47:25 EST 2017
//
//
package main
import "fmt"
import "math"
func bubble_sort(l []int) []int {
for i := 0; i < len(l); i++ {
for j := len(l) - 1; j > i; j-- {
if l[j] < l[j-1] {
swap(l, j, j-1)
}
}
}
return l
}
func insert_sort(l []int) []int {
for j := 1; j < len(l); j++ {
var key int = l[j]
var i int = j - 1
for i >= 0 && l[i] > key {
l[i+1] = l[i]
i -= 1
}
l[i+1] = key
}
return l
}
func merge_sort(l []int, p int, r int) []int {
if p < r {
var q int = (p + r) / 2
merge_sort(l, p, q)
merge_sort(l, q+1, r)
merge(l, p, q, r)
}
return l
}
func merge(l []int, p int, q int, r int) {
var n1 int = q - p + 1
var n2 int = r - q
var left []int = make([]int, n1+1)
var right []int = make([]int, n2+1)
for i := 0; i < n1; i++ {
left[i] = l[p+i]
}
for j := 0; j < n2; j++ {
right[j] = l[q+j+1]
}
left[n1] = math.MaxInt32
right[n2] = math.MaxInt32
var i int = 0
var j int = 0
for k := p; k <= r; k++ {
if left[i] <= right[j] {
l[k] = left[i]
i++
} else {
l[k] = right[j]
j++
}
}
}
func swap(l []int, i int, j int) {
var temp int = l[i]
l[i] = l[j]
l[j] = temp
}
func printarray(name string, l []int) {
fmt.Printf("%s: ", name)
for i := 0; i < len(l); i++ {
fmt.Printf("%d ", l[i])
}
fmt.Printf("\n")
}
func main() {
var l0 = []int{9, 7, 8, 5, 2, 6, 3, 1, 4, 0}
var l1 = []int{9, 7, 8, 5, 2, 6, 3, 1, 4, 0}
var l2 = []int{9, 7, 8, 5, 2, 6, 3, 1, 4, 0}
printarray("unsorted", l0)
printarray(" bubble", bubble_sort(l0))
printarray(" insert", insert_sort(l1))
printarray(" merge", merge_sort(l2, 0, len(l2)-1))
}