演算法回鍋肉 堆排序

2021-10-01 15:25:14 字數 1385 閱讀 6987

示例**純粹是為了加深印象,選擇的目標語言有更便捷的實現方式,另外去掉了一些假設條件檢查。

#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.青椒...