gem algorithms010 讀原始碼後試著寫

2021-09-28 12:57:41 字數 1489 閱讀 1819

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...