Skip to content

Commit a330783

Browse files
committed
fix quick sort
1 parent 7921f2d commit a330783

File tree

5 files changed

+84
-41
lines changed

5 files changed

+84
-41
lines changed

Algorithm/Sort/Quick_Sort/main/main.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@
77
package main
88

99
import (
10-
"Golang_Algorithm/Algorithm/Sort/Quick_Sort"
1110
"fmt"
11+
12+
"github.com/Juntaran/Golang_Algorithm/Algorithm/Sort/Quick_Sort"
1213
)
1314

1415
func main() {
1516
testArray := []int{4, 2, 6, 7, 9, 5, 1, 3}
16-
Quick_Sort.Quick_Sort_Recurse(testArray)
17+
Quick_Sort.Quick_Sort_Recurse_Single(testArray)
18+
//Quick_Sort.Quick_Sort_Recurse_Double(testArray)
1719
//Quick_Sort.Quick_Sort_Unrecurse(testArray)
1820
fmt.Println(testArray)
1921
}

Algorithm/Sort/Quick_Sort/quick_sort_recurse.go

Lines changed: 0 additions & 39 deletions
This file was deleted.
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Author: Juntaran
3+
* Email: Jacinthmail@gmail.com
4+
* Date: 2019/5/14 02:37
5+
*/
6+
7+
package Quick_Sort
8+
9+
/*
10+
双路快排
11+
从左向右找到大于 flag 的元素
12+
从右向左找到小于 flag 的元素
13+
判断是否越界,交换元素,left++, right--
14+
*/
15+
16+
// TODO:双路快排存在一些问题 https://blog.csdn.net/u012279631/article/details/80717445
17+
func Quick_Sort_Recurse_Double(nums []int) {
18+
length := len(nums)
19+
if length <= 1 {
20+
return
21+
}
22+
23+
flag := nums[0]
24+
left, right := 0, length - 1
25+
26+
for {
27+
for left <= right && nums[left] < flag {
28+
left ++
29+
}
30+
for right > left && nums[right] > flag {
31+
right --
32+
}
33+
if left > right {
34+
break
35+
}
36+
nums[left], nums[right] = nums[right], nums[left]
37+
left ++
38+
right --
39+
}
40+
41+
Quick_Sort_Recurse_Double(nums[:left])
42+
Quick_Sort_Recurse_Double(nums[left+1:])
43+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Author: Juntaran
3+
* Email: Jacinthmail@gmail.com
4+
* Date: 2017/4/18 17:15
5+
*/
6+
7+
package Quick_Sort
8+
9+
import "fmt"
10+
11+
func Quick_Sort_Recurse_Single(nums []int) {
12+
length := len(nums)
13+
if length <= 1 {
14+
return
15+
}
16+
17+
flag := nums[0]
18+
left, right := 0, len(nums) - 1
19+
20+
fmt.Println(nums, "\tleft:", left, "right:", right, "flag:", flag)
21+
22+
for i := 1; i <= right; {
23+
if nums[i] > flag {
24+
nums[i], nums[right] = nums[right], nums[i]
25+
right --
26+
fmt.Println(nums, "\tleft:", left, "right:", right, "flag:", flag)
27+
} else {
28+
nums[i], nums[left] = nums[left], nums[i]
29+
left ++
30+
i ++
31+
fmt.Println(nums, "\tleft:", left, "right:", right, "flag:", flag)
32+
}
33+
}
34+
35+
Quick_Sort_Recurse_Single(nums[:left])
36+
Quick_Sort_Recurse_Single(nums[left+1:])
37+
}

0 commit comments

Comments
 (0)