Skip to content

Commit

Permalink
quick sort added
Browse files Browse the repository at this point in the history
  • Loading branch information
0xAX committed Jun 25, 2014
1 parent b83ebc6 commit ca7cee2
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,5 @@ sorting/bubble_sort
sorting/selection_sort
sorting/merge_sort
sorting/cocktail_sort
sorting/gnome_sort
sorting/gnome_sort
sorting/quick_sort
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ alghoritms
* merge sort
* cocktail sort
* gnome sort
* quick sort

contribution
------------
Expand Down
49 changes: 49 additions & 0 deletions sorting/quick_sort.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package main

/*
* Quick sort - https://en.wikipedia.org/wiki/Quicksort
*/

import "fmt"
import "math/rand"

import "github.com/0xAX/go-algorithms"

func quick_sort(arr []int) []int {

if len(arr) <= 1 {
return arr
}

median := arr[rand.Intn(len(arr))]

low_part := make([]int, 0, len(arr))
high_part := make([]int, 0, len(arr))
middle_part := make([]int, 0, len(arr))

for _, item := range arr {
switch {
case item < median:
low_part = append(low_part, item)
case item == median:
middle_part = append(middle_part, item)
case item > median:
high_part = append(high_part, item)
}
}

low_part = quick_sort(low_part)
high_part = quick_sort(high_part)

low_part = append(low_part, middle_part...)
low_part = append(low_part, high_part...)

return low_part
}

func main() {
arr := utils.RandArray(10)
fmt.Println("Initial array is:", arr)
fmt.Println("")
fmt.Println("Sorted array is: ", quick_sort(arr))
}

0 comments on commit ca7cee2

Please sign in to comment.