示例**純粹是為了加深印象,選擇的目標語言有更便捷的實現方式,另外去掉了一些假設條件檢查。
#encoding:gbk
size = 20
class array
attr_accessor :heap_size
endarr = array.new(size) do #初始化待排序陣列,隨機填寫元素
rand(size)
enddef left(i)
2*ienddef right(i)
2*i + 1
enddef parent(i)
i/2enddef max_heapify(a,i)
l,r,largest = left(i),right(i),0
if l <= a.heap_size - 1 and a[l] > a[i]
largest = l
else
largest = i
endif r <= a.heap_size - 1 and a[r] > a[largest]
largest = r
endif largest != i
a[i],a[largest] = a[largest],a[i]
max_heapify(a,largest)
endenddef build_max_heap(a)
a.heap_size = a.size
(a.size/2 - 1).downto 0 do |i|
max_heapify(a,i)
endenddef heap_sort(a)
build_max_heap(a)
(a.size - 1).downto 1 do |i|
a[0],a[i] = a[i],a[0]
a.heap_size -= 1
max_heapify(a,0)
endendputs arr.inspect
arrc = arr.clone
heap_sort(arrc)
puts arrc.inspect
輸出如下:
---------- ruby ----------
[10, 5, 10, 7, 17, 8, 6, 0, 0, 14, 8, 5, 1, 1, 5, 5, 10, 17, 1, 0]
[0, 0, 0, 1, 1, 1, 5, 5, 5, 5, 6, 7, 8, 8, 10, 10, 10, 14, 17, 17]
output completed (0 sec consumed) - normal termination
這個排序演算法**比較緊湊,排序的想法有些取巧,好比用簸箕篩選農作物的種子呢,理解起來是需要花些時間的。 演算法回鍋肉 氣泡排序
示例 純粹是為了加深印象,選擇的目標語言有更便捷的實現方式,另外去掉了一些假設條件檢查。encoding gbk size 20 arr array.new size do 初始化待排序陣列,隨機填寫元素 rand size enddef bubble sort a b a.clone i j 0 ...
演算法回鍋肉 歸併排序
示例 純粹是為了加深印象,選擇的目標語言有更便捷的實現方式,另外去掉了一些假設條件檢查。encoding gbk size 20 arr array.new size do 初始化待排序陣列,隨機填寫元素 rand size enddef merge a,p,q,r one a p,q p 1 括弧...
回鍋肉的做法
回鍋肉用料 豬肉 瘦 250克 回鍋肉輔料 青椒 45克 青蒜 30克 回鍋肉調料 甜麵醬 20克 豆瓣辣醬 10克 白砂糖 10克 味精 5克 植物油 30克 各適量 回鍋肉製作工藝 1.肉沖淨,整塊放入冷水中約煮20分鐘 2.用筷子試插,如無血水滲出即已熟透,撈出,待冷卻後切成薄片備用 3.青椒...