2008年1月5日土曜日

土用でもないが

昼、知人に連れられて難波にある鰻屋に行く。いづもや。どうやら結構な老舗っぽい。
大阪に住んで20年オーバーだが知らんかった。やっぱり大阪外の人間のほうが大阪名物とか大阪の店について詳しかったりする。そもそも鰻を自腹で食べるという発想があんまりないしなぁ。
うな重の呼び方がまむしだった。店員さんのキャラ濃かったり、前金とかなにかと特殊ワールドだ。並・上・特とあって大抵上から2番目がコストパフォーマンス最強ていう都市伝説にのっとって上を。上で1050円。おいしかった。個人的には鰻は大阪だったら大阪竹葉亭(大阪とか言ってるが関東風)が最強だとおもふ。しかし竹葉亭はお値段も強すぎるので、デイリーに鰻食べたいときにはいいなここ。

クイックソートをfortranで書けたっぽい。Rubyのサンプルを書き換えただけなんだが。Rubyのと出力は一致してるしまぁこれでいいんかな。fortranのクイックソートのサンプルは検索して単品が出てこなかった(ライブラリとかはあったけど)ので、とりあえず貼っといてみる試み。Sunのライブラリにはクイックソート入っているとの噂だが。
以下11の整数要素を持つ配列arrayをクイックソートするあまりにも適当なサンプル。間違っているかもしれん。

implicit none
integer:: array(11)
integer:: left,right,lp,rp,pivot,n
integer :: t,i,part

interface
subroutine qpartition(array,left,right,part)
integer :: array(:)
integer ::left,right,part
end subroutine

recursive subroutine qsort(array,left,right)
integer :: array(:)
integer ::left,right
end subroutine
end interface

left=1
right=11
array(1:11)=(/16,5,3,2,21,10,4,6,7,9,18/)
print*,"array=",array
call qsort(array,left,right)
print*,"array=",array
end

recursive subroutine qsort(array,left,right)
integer ::array(:)
integer ::left,right,part

interface
subroutine qpartition(array,left,right,part)
integer ::array(:)
integer :: left,right,part
end subroutine
end interface

if (left == right) then
return
end if

call qpartition(array,left,right,part)

call qsort(array,left,part-1)
call qsort(array,part,right)

end subroutine

subroutine qpartition(array,left,right,part)

integer ::array(:)
integer ::left,right,part
integer ::t,i,pivot
integer ::lp,rp

pivot=array(int((left+right)/2))
print*,"pivot=",pivot,"at",int((left+right)/2)
lp=left
rp=right


do while (.true.)
do while (array(lp) < pivot)
lp=lp+1
end do

do while (array(rp) > pivot)
rp=rp-1
end do


if (lp > rp ) exit
print*,array
print*,"lp=",lp,"rp=",rp
t=array(lp)
array(lp)=array(rp)
array(rp)=t

lp=lp+1
rp=rp-1

end do

part=lp
end subroutine

作ってて知ったしょーもないことのメモ書き
fortranの無限ループは do while (.true.)~end do
形状引継ぎ配列を引数にもつサブルーチンを別のサブルーチンでコールするときには、呼び出し側のサブルーチン内にもinterface文が必要

それにしても無駄に長い。interface文とかのせいだ。たぶんmodule文とか使えばもっと簡潔になりそうな。というわけでmoduleについてちょっと調べよう。

0 コメント: