Skip to content

Commit b6b7905

Browse files
committed
Quicksort sorts in-place
1 parent 8bc4e86 commit b6b7905

File tree

1 file changed

+17
-30
lines changed

1 file changed

+17
-30
lines changed

sorts/quicksort.go

Lines changed: 17 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,25 @@
11
//Package sorts a package for demonstrating sorting algorithms in Go
22
package sorts
33

4-
import (
5-
"math/rand"
6-
)
7-
8-
func QuickSort(arr []int) []int {
9-
10-
if len(arr) <= 1 {
11-
return arr
4+
func Quicksort(array []int) {
5+
if len(array) <= 1 {
6+
return
127
}
8+
q := partition(array)
9+
Quicksort(array[:q])
10+
Quicksort(array[q+1:])
11+
}
1312

14-
median := arr[rand.Intn(len(arr))]
15-
16-
lowPart := make([]int, 0, len(arr))
17-
highPart := make([]int, 0, len(arr))
18-
middlePart := make([]int, 0, len(arr))
19-
20-
for _, item := range arr {
21-
switch {
22-
case item < median:
23-
lowPart = append(lowPart, item)
24-
case item == median:
25-
middlePart = append(middlePart, item)
26-
case item > median:
27-
highPart = append(highPart, item)
13+
func partition(array []int) int {
14+
r := len(array) - 1
15+
x := array[r] // last element of slice
16+
i := -1
17+
for j := 0; j < r; j++ {
18+
if array[j] <= x {
19+
i++
20+
array[i], array[j] = array[j], array[i]
2821
}
2922
}
30-
31-
lowPart = QuickSort(lowPart)
32-
highPart = QuickSort(highPart)
33-
34-
lowPart = append(lowPart, middlePart...)
35-
lowPart = append(lowPart, highPart...)
36-
37-
return lowPart
23+
array[i+1], array[r] = array[r], array[i+1]
24+
return i + 1
3825
}

0 commit comments

Comments
 (0)