# value 陣列型別,儲存待比較大小的元素。陣列長度比敗者樹陣列長度大1
# loser_tree 陣列型別,敗者樹。陣列元素是value陣列的索引
# node 待調整的葉子結點在value陣列中的索引
def adjust_loser_tree(value, loser_tree, node)
# 求葉子結點的父結點在敗者樹中的索引
t = (node + loser_tree.size) / 2
while t > 0
if value[node].email > value[loser_tree[t]].email
tmp = node
node = loser_tree[t]
loser_tree[t] = tmp
endt /= 2
endloser_tree[t] = node
end# 建立敗者樹
def create_loser_tree(value, loser_tree)
# 初始化敗者樹陣列
0.upto(loser_tree.size - 1) do |i|
loser_tree[i] = value.size - 1
end(value.size - 2).downto(0) do |i|
adjust_loser_tree(value, loser_tree, i)
endend
value陣列的長度比loser_tree陣列長度大1。
value陣列的最後乙個元素應該賦屈指範圍內的最小值。
外部排序 歸併演算法實現
基本要點 外部排序顧名思義是對外部儲存空間中資料的排序,那為什麼不能像選擇排序 插入排序 快速排序那樣也直接進行排序呢?原因是外部儲存的資料量可能是非常大的,而計算機的記憶體大小要遠遠小於外存,計算機一下子讀不了那麼多資料,無法一次性對它們進行排序,這就是外部排序產生的原因。基本思想 我們這裡借助歸...
選擇排序 ruby
先尋找最小的數與array 0 交換,再尋找第二小的數和array 1 交換。array 31,41,59,26,41,58 0.upto array.length 2 do count min 1000 最小值 index 0 start count while startif array sta...
Ruby排序演算法
1.氣泡排序 百科 wiki def bubble sort arr 1.upto arr.length 1 do i arr.length i times do j if arr j arr j 1 arr j arr j 1 arr j 1 arr j endend endarr endarra...