File tree Expand file tree Collapse file tree 9 files changed +458
-1
lines changed
Filter options
Expand file tree Collapse file tree 9 files changed +458
-1
lines changed
Original file line number Diff line number Diff line change @@ -61,3 +61,19 @@ def bubbleSort(arr):
61
61
arr[j], arr[j + 1 ] = arr[j + 1 ], arr[j]
62
62
return arr
63
63
```
64
+
65
+ ## 7. Go 代码实现
66
+
67
+ ``` go
68
+ func bubbleSort (arr []int ) []int {
69
+ length := len (arr)
70
+ for i := 0 ; i < length; i++ {
71
+ for j := 0 ; j < length-1 -i; j++ {
72
+ if arr[j] > arr[j+1 ] {
73
+ arr[j], arr[j+1 ] = arr[j+1 ], arr[j]
74
+ }
75
+ }
76
+ }
77
+ return arr
78
+ }
79
+ ```
Original file line number Diff line number Diff line change @@ -48,3 +48,21 @@ def selectionSort(arr):
48
48
arr[i], arr[j] = arr[j], arr[i]
49
49
return arr
50
50
```
51
+
52
+ ## 5. Go 代码实现
53
+
54
+ ``` go
55
+ func selectionSort (arr []int ) []int {
56
+ length := len (arr)
57
+ for i := 0 ; i < length-1 ; i++ {
58
+ min := i
59
+ for j := i + 1 ; j < length; j++ {
60
+ if arr[min] > arr[j] {
61
+ min = j
62
+ }
63
+ }
64
+ arr[i], arr[min] = arr[min], arr[i]
65
+ }
66
+ return arr
67
+ }
68
+ ```
Original file line number Diff line number Diff line change @@ -49,3 +49,19 @@ def insertionSort(arr):
49
49
arr[preIndex+ 1 ] = current
50
50
return arr
51
51
```
52
+
53
+ ## 5. Go 代码实现
54
+ ``` go
55
+ func insertionSort (arr []int ) []int {
56
+ for i := range arr {
57
+ preIndex := i - 1
58
+ current := arr[i]
59
+ for preIndex >= 0 && arr[preIndex] > current {
60
+ arr[preIndex+1 ] = arr[preIndex]
61
+ preIndex -= 1
62
+ }
63
+ arr[preIndex+1 ] = current
64
+ }
65
+ return arr
66
+ }
67
+ ```
Original file line number Diff line number Diff line change @@ -62,3 +62,28 @@ def shellSort(arr):
62
62
return arr
63
63
}
64
64
```
65
+
66
+ ## 4. Go 代码实现
67
+
68
+ ``` go
69
+ func shellSort (arr []int ) []int {
70
+ length := len (arr)
71
+ gap := 1
72
+ for gap < gap/3 {
73
+ gap = gap*3 + 1
74
+ }
75
+ for gap > 0 {
76
+ for i := gap; i < length; i++ {
77
+ temp := arr[i]
78
+ j := i - gap
79
+ for j >= 0 && arr[j] > temp {
80
+ arr[j+gap] = arr[j]
81
+ j -= gap
82
+ }
83
+ arr[j+gap] = temp
84
+ }
85
+ gap = gap / 3
86
+ }
87
+ return arr
88
+ }
89
+ ```
Original file line number Diff line number Diff line change 9
9
在《数据结构与算法 JavaScript 描述》中,作者给出了自下而上的迭代方法。但是对于递归法,作者却认为:
10
10
11
11
> However, it is not possible to do so in JavaScript, as the recursion goes too deep for the language to handle.
12
- >
12
+ >
13
13
> 然而,在 JavaScript 中这种方式不太可行,因为这个算法的递归深度对它来讲太深了。
14
14
15
15
@@ -96,3 +96,43 @@ def merge(left,right):
96
96
result.append(right.pop(0 ));
97
97
return result
98
98
```
99
+
100
+ ## 6. Go 代码实现
101
+
102
+ ``` go
103
+ func mergeSort (arr []int ) []int {
104
+ length := len (arr)
105
+ if length < 2 {
106
+ return arr
107
+ }
108
+ middle := length / 2
109
+ left := arr[0 :middle]
110
+ right := arr[middle:]
111
+ return merge (mergeSort (left), mergeSort (right))
112
+ }
113
+
114
+ func merge (left []int , right []int ) []int {
115
+ var result []int
116
+ for len (left) != 0 && len (right) != 0 {
117
+ if left[0 ] <= right[0 ] {
118
+ result = append (result, left[0 ])
119
+ left = left[1 :]
120
+ } else {
121
+ result = append (result, right[0 ])
122
+ right = right[1 :]
123
+ }
124
+ }
125
+
126
+ for len (left) != 0 {
127
+ result = append (result, left[0 ])
128
+ left = left[1 :]
129
+ }
130
+
131
+ for len (right) != 0 {
132
+ result = append (result, right[0 ])
133
+ right = right[1 :]
134
+ }
135
+
136
+ return result
137
+ }
138
+ ```
Original file line number Diff line number Diff line change @@ -92,3 +92,38 @@ def partition(arr, left, right):
92
92
def swap (arr , i , j ):
93
93
arr[i], arr[j] = arr[j], arr[i]
94
94
```
95
+
96
+ ## 5. Go 代码实现
97
+
98
+ ``` go
99
+ func quickSort (arr []int ) []int {
100
+ return _quickSort (arr, 0 , len (arr)-1 )
101
+ }
102
+
103
+ func _quickSort (arr []int , left , right int ) []int {
104
+ if left < right {
105
+ partitionIndex := partition (arr, left, right)
106
+ _quickSort (arr, left, partitionIndex-1 )
107
+ _quickSort (arr, partitionIndex+1 , right)
108
+ }
109
+ return arr
110
+ }
111
+
112
+ func partition (arr []int , left , right int ) int {
113
+ pivot := left
114
+ index := pivot + 1
115
+
116
+ for i := index; i <= right; i++ {
117
+ if arr[i] < arr[pivot] {
118
+ swap (arr, i, index)
119
+ index += 1
120
+ }
121
+ }
122
+ swap (arr, pivot, index-1 )
123
+ return index - 1
124
+ }
125
+
126
+ func swap (arr []int , i , j int ) {
127
+ arr[i], arr[j] = arr[j], arr[i]
128
+ }
129
+ ```
Original file line number Diff line number Diff line change @@ -106,3 +106,44 @@ def heapSort(arr):
106
106
heapify(arr, 0 )
107
107
return arr
108
108
```
109
+
110
+ ## 5. Go 代码实现
111
+
112
+ ``` go
113
+ func heapSort (arr []int ) []int {
114
+ arrLen := len (arr)
115
+ buildMaxHeap (arr, arrLen)
116
+ for i := arrLen - 1 ; i >= 0 ; i-- {
117
+ swap (arr, 0 , i)
118
+ arrLen -= 1
119
+ heapify (arr, 0 , arrLen)
120
+ }
121
+ return arr
122
+ }
123
+
124
+ func buildMaxHeap (arr []int , arrLen int ) {
125
+ for i := arrLen / 2 ; i >= 0 ; i-- {
126
+ heapify (arr, i, arrLen)
127
+ }
128
+ }
129
+
130
+ func heapify (arr []int , i , arrLen int ) {
131
+ left := 2 *i + 1
132
+ right := 2 *i + 2
133
+ largest := i
134
+ if left < arrLen && arr[left] > arr[largest] {
135
+ largest = left
136
+ }
137
+ if right < arrLen && arr[right] > arr[largest] {
138
+ largest = right
139
+ }
140
+ if largest != i {
141
+ swap (arr, i, largest)
142
+ heapify (arr, largest, arrLen)
143
+ }
144
+ }
145
+
146
+ func swap (arr []int , i , j int ) {
147
+ arr[i], arr[j] = arr[j], arr[i]
148
+ }
149
+ ```
Original file line number Diff line number Diff line change @@ -54,3 +54,29 @@ def countingSort(arr, maxValue):
54
54
bucket[j]-= 1
55
55
return arr
56
56
```
57
+
58
+ ## 4. Go 代码实现
59
+
60
+ ``` go
61
+ func countingSort (arr []int , maxValue int ) []int {
62
+ bucketLen := maxValue + 1
63
+ bucket := make ([]int , bucketLen) // 初始为0的数组
64
+
65
+ sortedIndex := 0
66
+ length := len (arr)
67
+
68
+ for i := 0 ; i < length; i++ {
69
+ bucket[arr[i]] += 1
70
+ }
71
+
72
+ for j := 0 ; j < bucketLen; j++ {
73
+ for bucket[j] > 0 {
74
+ arr[sortedIndex] = j
75
+ sortedIndex += 1
76
+ bucket[j] -= 1
77
+ }
78
+ }
79
+
80
+ return arr
81
+ }
82
+ ```
You can’t perform that action at this time.
0 commit comments