Skip to content

Instantly share code, notes, and snippets.

@gobwas
Last active October 5, 2016 18:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gobwas/1b970d4f0fa4a83298140e5c9dccb356 to your computer and use it in GitHub Desktop.
Save gobwas/1b970d4f0fa4a83298140e5c9dccb356 to your computer and use it in GitHub Desktop.
Sorting Problems
package main
import (
"fmt"
)
func main() {
l := []int{1, -20, 7, 6, 0, 9}
quicksort(l, 0, 6)
fmt.Println(l)
}
func partition2(data []int, l, r int) int {
m := (r - l) / 2
x := data[m]
i := l
j := r - 1
for i <= j {
for ; data[i] <= x; i++ {
}
for ; data[j] > x; j-- {
}
if i > j {
break
}
data[i], data[j] = data[j], data[i]
i++
j--
}
fmt.Println("@", l, r, m, data, i)
return i
}
func partition(data []int, l, r int) int {
x := data[l] // pivot
j := l
for i := l + 1; i < r; i++ {
if data[i] <= x {
j++
data[j], data[i] = data[i], data[j]
}
}
data[j], data[l] = data[l], data[j]
fmt.Println("@", l, r, data, j)
return j
}
func quicksort(data []int, l, r int) {
if l >= r {
return
}
m := partition2(data, l, r)
if m-1 > l {
quicksort(data, l, m)
}
quicksort(data, m+1, r)
}
func insertionSort(data []int, l, r int) {
for i := l + 1; i < r; i++ {
for j := i; j > l && data[j-1] > data[j]; j-- {
data[j], data[j-1] = data[j-1], data[j]
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment