Bruce.です。
davi さんは書きました (2009/02/11 0:23):
>>> repeat
>>> while data[i] < x do i := i+1;
>>> while x < data[j] do j := j-1;
>>> if i ≧ j then goto 1;←ループの終了
>>> swap(i,j);
>>> i := i+1; j :=j-1;
>>> until false; ← repeat に対応
>>> 1;←gotoの指定先
>> repeat 〜 until ほげほげ
>> で、ほげほげが「真」になるまで繰り返しですが、上の例では until false なので
>> 無限ループになっていて、抜けるときはswapの手前のif文の判定が真になったと
>> きと。
>
> ほほぅ…本人が上手に使いこなせるのならば…という条件付きで、
> 無限ループを意図的に用いるってやり口もアリなんですね…。
そりゃもちろん。
上記のrepeat until ループはその内側のwhile ループの結果によって
ループを続行するかが決まりますから、
while ... begin
end;
のように前判定のループでも
repeat
until
のような後判定のループでもうまくいきません。
ちょっと変形すれば前判定のループでOKですけどね。
一回ムダに判定するような形になるので、それを嫌ったのかもしれません。
こんな感じ。
クイックソート
http://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/quick-sort.html
int partition(int[] a,int i,int j,int x){
int l=i,r=j;
// 検索が交差するまで繰り返します
while(l<=r){
// 軸要素以上のデータを探します
while(l<=j && a[l]<x) l++;
// 軸要素未満のデータを探します
while(r>=i && a[r]>=x) r--;
if(l>r) break;
int t=a[l];
a[l]=a[r];
a[r]=t;
l++; r--;
}
return l;
}
--
木村浩一
I thought what I'd do was, I'd pretend I was one of those deaf-mutes or should I?
mail kbk [at] kt.rim.or.jp
web www.kt.rim.or.jp/~kbk/zakkicho/
homepage3.nifty.com/farstar/