n log 3 n排序演算法

2021-07-13 17:48:57 字數 1991 閱讀 6485

老規矩,上來先表示對原作者的敬重之心: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的此篇部落格 希爾排序 可惜的是當時不是很懂。又因工作繁忙以至於忘了此事。直到最近換完工作才有想起有此坑還未填上,便又翻出看了一遍。這次有了全新的認識。特此記錄 現在才想起當時為何看的不是很懂,是因為此篇部落格中的實驗中間省略了一小部分。看似省略的...