Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,38 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"container/heap"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type HeapHelper struct {
|
||||
container sort.Interface
|
||||
length int
|
||||
}
|
||||
|
||||
func (self HeapHelper) Len() int { return self.length }
|
||||
// We want a max-heap, hence reverse the comparison
|
||||
func (self HeapHelper) Less(i, j int) bool { return self.container.Less(j, i) }
|
||||
func (self HeapHelper) Swap(i, j int) { self.container.Swap(i, j) }
|
||||
// this should not be called
|
||||
func (self *HeapHelper) Push(x interface{}) { panic("impossible") }
|
||||
func (self *HeapHelper) Pop() interface{} {
|
||||
self.length--
|
||||
return nil // return value not used
|
||||
}
|
||||
|
||||
func heapSort(a sort.Interface) {
|
||||
helper := HeapHelper{ a, a.Len() }
|
||||
heap.Init(&helper)
|
||||
for helper.length > 0 {
|
||||
heap.Pop(&helper)
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
a := []int{170, 45, 75, -90, -802, 24, 2, 66}
|
||||
fmt.Println("before:", a)
|
||||
heapSort(sort.IntSlice(a))
|
||||
fmt.Println("after: ", a)
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"sort"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
a := []int{170, 45, 75, -90, -802, 24, 2, 66}
|
||||
fmt.Println("before:", a)
|
||||
heapSort(sort.IntSlice(a))
|
||||
fmt.Println("after: ", a)
|
||||
}
|
||||
|
||||
func heapSort(a sort.Interface) {
|
||||
for start := (a.Len() - 2) / 2; start >= 0; start-- {
|
||||
siftDown(a, start, a.Len()-1)
|
||||
}
|
||||
for end := a.Len() - 1; end > 0; end-- {
|
||||
a.Swap(0, end)
|
||||
siftDown(a, 0, end-1)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func siftDown(a sort.Interface, start, end int) {
|
||||
for root := start; root*2+1 <= end; {
|
||||
child := root*2 + 1
|
||||
if child+1 <= end && a.Less(child, child+1) {
|
||||
child++
|
||||
}
|
||||
if !a.Less(root, child) {
|
||||
return
|
||||
}
|
||||
a.Swap(root, child)
|
||||
root = child
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue