老規矩,上來先表示對原作者的敬重之心:n*log(3)n排序演算法 -- 修江的蘆葦
關於三叉堆排序呢,對於已經理解了二叉堆排序的人來說,其實很容易理解。該講的在原作裡面,作者已經講的很清楚了,這裡就只貼一下**了。
首先是 heap.go:
package heap // import "triple-heap"
import "sort"
type inte***ce inte***ce )
pop() inte***ce{}
}func init(h inte***ce)
}func push(h inte***ce, x inte***ce{})
func pop(h inte***ce) inte***ce{}
func remove(h inte***ce, i int) inte***ce{}
return h.pop()
}func fix(h inte***ce, i int)
func up(h inte***ce, j int)
h.swap(i, j)
j = i }}
func down(h inte***ce, i, n int)
j := j1 // left child
if j2 := j1 + 1; j2 < n && !h.less(j, j2)
if j3 := j1 + 2; j3 < n && !h.less(j, j3)
if !h.less(j, i)
h.swap(i, j)
i = j
}}
接下來是 sort.go:
package main
import (
"fmt"
"triple-heap"
)type myheap int
func (h *myheap) less(i, j int) bool
func (h *myheap) swap(i, j int)
func (h *myheap) len() int
func (h *myheap) pop() (v inte***ce{})
func (h *myheap) push(v inte***ce{})
func tripleheapsort(h heap.inte***ce) , 0, h.len())
for h.len() > 0
for i := 0; i < len(t); i++
}func main()
fmt.println(h)
tripleheapsort(&h)
fmt.println(h)
}
執行 go run sort.go結果:
[5 3 1 9 0 6 4 7 8 2]
[0 1 2 3 4 5 6 7 8 9]
對於包的組織和管理,大家自己去搞咯~
好啦,本期節目到此為止,咱們下期再見!
演算法 排序(3)
插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。本節介紹兩種插入排序方法 直接插入排序和希爾排序。直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r ...
排序演算法 N個正整數排序
高德納在 計算機程式設計藝術 裡對演算法歸納為以下幾點 輸入 乙個演算法必須有零或以上的輸入量 輸出 乙個演算法應有乙個或以上的輸出量 明確性 演算法的描述必須無歧義,實際執行結果是確定的 有限性 必須在有限個步驟內結束 有效性 又稱可行性,能夠被執行者實現 如果想詳細研究演算法推薦 資料結構與演算...
排序演算法3 希爾排序
此篇我是17年7月份有幸閱讀到morewindows的此篇部落格 希爾排序 可惜的是當時不是很懂。又因工作繁忙以至於忘了此事。直到最近換完工作才有想起有此坑還未填上,便又翻出看了一遍。這次有了全新的認識。特此記錄 現在才想起當時為何看的不是很懂,是因為此篇部落格中的實驗中間省略了一小部分。看似省略的...