Skip to content

Commit a48e7bf

Browse files
committed
🐗 Update Problem 31
1 parent a2aec6c commit a48e7bf

File tree

13 files changed

+690
-30
lines changed

13 files changed

+690
-30
lines changed

README.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,16 @@ LeetCode of algorithms with golang solution(updating:smiley:).
3030
| 18 | [4Sum][0018-url] | [Golang][0018-golang] | 28.5% |:purple_heart::purple_heart: |:eyes: |
3131
| 19 | [Remove Nth Node From End of List][0018-url] | [Golang][0019-golang] | 33.6% |:purple_heart: :purple_heart: | :eyes:|
3232
| 20 | [Valid Parentheses ][0020-url] | [Golang][0020-golang] | 34.7% |:purple_heart: | :eyes:|
33-
| 24 | [Swap Nodes in Pairs ][0020-url] | [Golang][0024-golang] | 41.2% |:purple_heart: :purple_heart: | :eyes:|
34-
| 25 | [Reverse Nodes in k-Group ][0020-url] | [Golang][0025-golang] | 33.6% |:purple_heart::purple_heart::purple_heart: | :eyes:|
33+
| 21 | [Merge Two Sorted Lists ][0021-url] | [Golang][0021-golang] | 34.7% |:purple_heart: | :eyes:|
34+
| 22 | [Generate Parentheses ][0022-url] | [Golang][0023-golang] | 34.7% |:purple_heart: :purple_heart:| :eyes:|
35+
| 23 | [Merge k Sorted Lists ][0023-url] | [Golang][0023-golang] | 34.7% |:purple_heart: :purple_heart::purple_heart:| :eyes:|
36+
| 24 | [Swap Nodes in Pairs ][0024-url] | [Golang][0024-golang] | 41.2% |:purple_heart: :purple_heart: | :eyes:|
37+
| 25 | [Reverse Nodes in k Group ][0020-url] | [Golang][0025-golang] | 33.6% |:purple_heart::purple_heart::purple_heart: | :eyes:|
38+
| 26 | [Remove Duplicates-from-Sorted-Array][0026-url] | [Golang][0026-golang] | 34.7% |:purple_heart: | :eyes:|
39+
| 27 | [VRemove Element ][0027-url] | [Golang][0027-golang] | 34.7% |:purple_heart: | :eyes:|
40+
| 28 | [Implement strStr][0028-url] | [Golang][0028-golang] | 34.7% |:purple_heart: | :eyes:|
41+
| 29 | [Divide Two Integers ][0029-url] | [Golang][0029-golang] | 34.7% |:purple_heart::purple_heart: | :eyes:|
42+
| 30 | [Substring with Concatenation of All Words ][0030-url] | [Golang][0030-golang] | 34.7% |:purple_heart: :purple_heart::purple_heart:| :eyes:|
3543
| 141 | [Linked List Cycle ][0020-url] | [Golang][0141-golang] | 34.6% |:purple_heart: | :eyes:|
3644
| 142 | [Linked List Cycle II ][0020-url] | [Golang][0142-golang] | 29.9% |:purple_heart: | :eyes:|
3745
| 206 | [Reverse Linked List ][0020-url] | [Golang][0206-golang] | 50.0% |:purple_heart: | :eyes:|

lib/Sort.go

Lines changed: 330 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,330 @@
1+
package Sort
2+
3+
import "math/rand"
4+
5+
/***********************************************************************************************************
6+
排序算法
7+
1.冒泡排序(Bubble Sort) BubbleSort() https://en.wikipedia.org/wiki/Bubble_sort
8+
2.插入排序(Insert Sort) InsertSort() https://en.wikipedia.org/wiki/Insertion_sort
9+
3.选择排序(Select Sort) SelectSort() https://en.wikipedia.org/wiki/Selection_sort
10+
4.快速排序(Quick Sort) QuickSort() https://en.wikipedia.org/wiki/Quicksort
11+
5.归并排序(Merge Sort) MergeSort() https://en.wikipedia.org/wiki/Merge_sort
12+
6.堆排序(Heap Sort) HeapSort() https://en.wikipedia.org/wiki/Heapsort
13+
7.希尔排序(Shell Sort) ShellSort() https://en.wikipedia.org/wiki/Shellsort
14+
8.鸡尾酒排序(Cocktail Shaker Sort)CocktailShakerSort() https://en.wikipedia.org/wiki/Cocktail_sort
15+
9.梳排序(Comb Sort) CombSort() https://en.wikipedia.org/wiki/Combsort
16+
10.计数排序(Counting Sort) CountingSort() https://en.wikipedia.org/wiki/Counting_sort
17+
11.地精排序(Gnome Sort) GnomeSort() https://en.wikipedia.org/wiki/Gnome_sort
18+
12.奇偶排序(Odd Even Sort) OddEvenSort() https://en.wikipedia.org/wiki/Odd-even_sort
19+
***********************************************************************************************************/
20+
21+
// 冒泡排序(Bubble Sort)
22+
func BubbleSort(arr []int) []int {
23+
tmp := 0
24+
for i := 0; i < len(arr); i++ {
25+
for j := 0; j < len(arr)-i-1; j++ {
26+
if arr[j] > arr[j+1] {
27+
tmp = arr[j]
28+
arr[j] = arr[j+1]
29+
arr[j+1] = tmp
30+
}
31+
}
32+
}
33+
return arr
34+
}
35+
36+
// 插入排序(Insert Sort)
37+
func InsertSort(arr []int) []int {
38+
var i, j, tmp int
39+
for i = 1; i < len(arr); i++ {
40+
tmp = arr[i]
41+
for j = i; j > 0 && arr[j-1] > tmp; j-- {
42+
arr[j] = arr[j-1]
43+
}
44+
arr[j] = tmp
45+
}
46+
return arr
47+
}
48+
49+
// 选择排序(Select Sort)
50+
func SelectSort(arr []int) []int {
51+
var min = 0
52+
var tmp = 0
53+
54+
for i := 0; i < len(arr); i++ {
55+
min = i
56+
for j := i + 1; j < len(arr); j++ {
57+
if arr[j] < arr[min] {
58+
min = j
59+
}
60+
}
61+
62+
tmp = arr[i]
63+
arr[i] = arr[min]
64+
arr[min] = tmp
65+
}
66+
return arr
67+
}
68+
69+
// 快速排序(Qucik Sort)
70+
func QuickSort(arr []int) []int {
71+
72+
if len(arr) <= 1 {
73+
return arr
74+
}
75+
76+
median := arr[rand.Intn(len(arr))]
77+
78+
low_part := make([]int, 0, len(arr))
79+
high_part := make([]int, 0, len(arr))
80+
middle_part := make([]int, 0, len(arr))
81+
82+
for _, item := range arr {
83+
switch {
84+
case item < median:
85+
low_part = append(low_part, item)
86+
case item == median:
87+
middle_part = append(middle_part, item)
88+
case item > median:
89+
high_part = append(high_part, item)
90+
}
91+
}
92+
93+
low_part = QuickSort(low_part)
94+
high_part = QuickSort(high_part)
95+
96+
low_part = append(low_part, middle_part...)
97+
low_part = append(low_part, high_part...)
98+
99+
return low_part
100+
}
101+
102+
// 归并排序(Merge Sort)
103+
func MergeSort(arr []int) []int {
104+
if len(arr) <= 1 {
105+
return arr
106+
}
107+
108+
middle := len(arr) / 2
109+
110+
left := MergeSort(arr[:middle])
111+
right := MergeSort(arr[middle:])
112+
113+
return Merge(left, right)
114+
}
115+
func Merge(left, right []int) []int {
116+
result := make([]int, 0, len(left)+len(right))
117+
118+
for len(left) > 0 || len(right) > 0 {
119+
if len(left) == 0 {
120+
return append(result, right...)
121+
}
122+
if len(right) == 0 {
123+
return append(result, left...)
124+
}
125+
if left[0] <= right[0] {
126+
result = append(result, left[0])
127+
left = left[1:]
128+
} else {
129+
result = append(result, right[0])
130+
right = right[1:]
131+
}
132+
}
133+
134+
return result
135+
}
136+
137+
// 堆排序(Heap Sort)
138+
func HeapSort(arr []int) []int {
139+
i := 0
140+
tmp := 0
141+
for i = len(arr)/2 - 1; i >= 0; i-- {
142+
arr = Sift(arr, i, len(arr))
143+
}
144+
145+
for i = len(arr) - 1; i >= 1; i-- {
146+
tmp = arr[0]
147+
arr[0] = arr[i]
148+
arr[i] = tmp
149+
arr = Sift(arr, 0, i)
150+
}
151+
return arr
152+
}
153+
154+
func Sift(arr []int, i int, arrLen int) []int {
155+
done := false
156+
157+
tmp := 0
158+
maxChild := 0
159+
160+
for (i*2+1 < arrLen) && (!done) {
161+
if i*2+1 == arrLen-1 {
162+
maxChild = i*2 + 1
163+
} else if arr[i*2+1] > arr[i*2+2] {
164+
maxChild = i*2 + 1
165+
} else {
166+
maxChild = i*2 + 2
167+
}
168+
169+
if arr[i] < arr[maxChild] {
170+
tmp = arr[i]
171+
arr[i] = arr[maxChild]
172+
arr[maxChild] = tmp
173+
i = maxChild
174+
} else {
175+
done = true
176+
}
177+
}
178+
179+
return arr
180+
}
181+
182+
// 希尔排序(Shell Sort)
183+
func ShellSort(arr []int) []int {
184+
for d := int(len(arr) / 2); d > 0; d /= 2 {
185+
for i := d; i < len(arr); i++ {
186+
for j := i; j >= d && arr[j-d] > arr[j]; j -= d {
187+
arr[j], arr[j-d] = arr[j-d], arr[j]
188+
}
189+
}
190+
}
191+
return arr
192+
}
193+
194+
// 鸡尾酒排序(Cocktail shaker sort)
195+
func CocktailShakerSort(arr []int) []int {
196+
tmp := 0
197+
for i := 0; i < len(arr)/2; i++ {
198+
199+
left := 0
200+
right := len(arr) - 1
201+
202+
for left <= right {
203+
if arr[left] > arr[left+1] {
204+
tmp = arr[left]
205+
arr[left] = arr[left+1]
206+
arr[left+1] = tmp
207+
}
208+
209+
left++
210+
211+
if arr[right-1] > arr[right] {
212+
tmp = arr[right-1]
213+
arr[right-1] = arr[right]
214+
arr[right] = tmp
215+
}
216+
217+
right--
218+
219+
}
220+
}
221+
return arr
222+
}
223+
224+
// 梳排序(Comb Sort)
225+
func CombSort(arr []int) []int {
226+
tmp := 0
227+
arrLen := len(arr)
228+
gap := arrLen
229+
230+
for gap > 1 {
231+
gap = gap * 10 / 13 //shrink factor is 1.3
232+
233+
for i := 0; i+gap < arrLen; i++ {
234+
if arr[i] > arr[i+gap] {
235+
tmp = arr[i]
236+
arr[i] = arr[i+gap]
237+
arr[i+gap] = tmp
238+
}
239+
}
240+
}
241+
return arr
242+
}
243+
244+
// 计数排序(Counting Sort)
245+
func CountingSort(arr []int) []int {
246+
k := getK(arr)
247+
array_of_counts := make([]int, k)
248+
249+
for i := 0; i < len(arr); i++ {
250+
array_of_counts[arr[i]] += 1
251+
}
252+
253+
for i, j := 0, 0; i < k; i++ {
254+
for {
255+
if array_of_counts[i] > 0 {
256+
arr[j] = i
257+
j += 1
258+
array_of_counts[i] -= 1
259+
continue
260+
}
261+
break
262+
}
263+
}
264+
return arr
265+
}
266+
267+
func getK(arr []int) int {
268+
if len(arr) == 0 {
269+
return 1
270+
}
271+
k := arr[0]
272+
for _, v := range arr {
273+
if v > k {
274+
k = v
275+
}
276+
}
277+
return k + 1
278+
}
279+
280+
// 地精排序(Gnome Sort)
281+
func GnomeSort(arr []int) []int {
282+
i := 1
283+
tmp := 0
284+
285+
for i < len(arr) {
286+
if arr[i] >= arr[i-1] {
287+
i++
288+
} else {
289+
tmp = arr[i]
290+
arr[i] = arr[i-1]
291+
arr[i-1] = tmp
292+
293+
if i > 1 {
294+
i--
295+
}
296+
}
297+
}
298+
return arr
299+
}
300+
301+
// 奇偶排序(Odd Even Sort)
302+
func OddEvenSort(arr []int) []int {
303+
tmp, isSorted := 0, false
304+
305+
for isSorted == false {
306+
307+
isSorted = true
308+
309+
for i := 1; i < len(arr)-1; i = i + 2 {
310+
if arr[i] > arr[i+1] {
311+
tmp = arr[i]
312+
arr[i] = arr[i+1]
313+
arr[i+1] = tmp
314+
315+
isSorted = false
316+
}
317+
}
318+
319+
for i := 0; i < len(arr)-1; i = i + 2 {
320+
if arr[i] > arr[i+1] {
321+
tmp = arr[i]
322+
arr[i] = arr[i+1]
323+
arr[i+1] = tmp
324+
325+
isSorted = false
326+
}
327+
}
328+
}
329+
return arr
330+
}

src/0015.3Sum/Solution.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,7 @@ func threeSum(nums []int) [][]int {
3434
} else {
3535
high--
3636
}
37-
3837
}
39-
4038
}
4139
}
4240
return ans

0 commit comments

Comments
 (0)