gem algorithms010 讀原始碼後試著寫
上午花時間裝cygwin下的vim,開始時,是可以從bash下的vim中拷資料到windows下,後來重新安裝了**im後,就不可以了。
折騰了半天,終於可以了。
下午接著寫希爾排序,我發現書上的知識是分散的,我想寫乙個shell排序,發現首先增量序列就弄不出來。
也對,書上都是偽**呢。
shell排序寫不出來,先寫快速排序。
def partition(arr,low,high)
pivotkey=arr[low]
while (low=pivotkey)
high -= 1
endarr[low],arr[high]=arr[high],arr[low]
while(lowruby quick.rb
[3, 1, 5, 4]
[1, 3, 4, 5]
接著是簡單選擇排序
def selectsort(arr)
(0..arr.size-1-1).each do |i|
min=i
(i..arr.size-1).each do |j|
if arr[min]>arr[j]
min=j
endend
if min !=i
arr[min],arr[i]=arr[i],arr[min]
endend
enda=[3,1,4,2]
puts a.to_s
selectsort(a)
puts a.to_s
執行結果如下:
c:\users\16493\yang_code>ruby select_sort.rb
[3, 1, 4, 2]
[1, 2, 3, 4]
堆排序的**如下:
def heapadjust(arr,s,m)
rc=arr[s]
j=2*s
while(j<=m)
if j=arr[j]
break
endarr[s]=arr[j]
s=jj *=2
endarr[s]=rc
enddef heapsort(arr)
((arr.size-1)/2).downto(0) do |i|
heapadjust(arr,i,arr.size-1)
end(arr.size-1).downto(0) do |i|
arr[0],arr[i]=arr[i],arr[0]
heapadjust(arr,0,i-1)
endend
a=[3,1,4,2]
puts a.to_s
heapsort(a)
puts a.to_s
測試例子如下:
c:\users\16493\yang_code>ruby dui_sort.rb
[3, 1, 4, 2]
[1, 2, 3, 4]
gem algorithms010 讀然後學著寫
gem algorithms010 讀然後學著寫 資料結構 書上有2 路插入排序,書上只用乙個陣列,我用兩個臨時資料,把這個排序演算法弄出來了。程式如下 def insert arr,val r0 val k 0 arr.size 1 downto 1 do i if i 0 and arr i r...
gem algorithms010 讀原始碼後開始寫
gem algorithms010 讀原始碼後開始寫 今天接著想把稀疏矩陣的幾個演算法弄一下,先弄轉置,我不知如何在ruby中儲存結構體,於是用struct,寫得很差,總算弄出乙個。n struct.new juchen mu,nu,tu,arr data 1,2,12 1,3,9 3,1,3 3,...
gem algorithms010 讀然後學著寫
gem algorithms010 讀然後學著寫 今天為了弄那個參賽國家接龍的程式,忽然想到,程式設計實踐 上講了,齊次馬爾科夫過程,我想,用ruby也寫一次。因為當時,用c語言感覺相當麻煩,而用awk而無比優雅。可程式並不能解決我的問題。還得再想想。arr file.open english2.t...