#/*********************************************************** # sosrh.rb -- 自己組織化探索 #***********************************************************/ # 置換法 NOT_FOUND = (-1) def sosrch(x, a, imin, imax) if (imin > imax); return NOT_FOUND; end a[imax + 1] = x; # 番人 i = imin; while (a[i] != x); i += 1; end if (i > imax); return NOT_FOUND; end if (i != imin) a[i] = a[i - 1]; i -= 1; a[i] = x; # 一つ前と交換 end return i end N = 8 a = [] for i in 0...N; a[i] = (rand * 100 + 1).to_i; end while (true) for i in 0...N; printf(" a[%d]=%d", i, a[i]); end printf("\nどれを探しますか? ") x = gets.to_i; if (x < 0); break; end i = sosrch(x, a, 0, N - 1) if (i != NOT_FOUND); printf("i = %d\n", i) else printf("見つかりません.\n"); end end exit 0