2015年1月10日土曜日

150110(4)

Ruby


「アルゴリズムとデータ構造」のRuby版。

リニアサーチ

# -*- coding: cp932 -*-

NOT_FOUND = -1
N = 10

def linear_search(x, a, num)
  # 配列の範囲内で目的の値を探す
  n = 0
  while n < num && a[n] != x
    n += 1
  end
  return n if n < num
  return NOT_FOUND
end

# 適当な配列を作る
array = []
printf("array ")
for i in (0..N - 1)
  printf("[%d]:%d ", i, array[i] = rand(20))
end
printf("\n何を探しますか:")
i = gets().to_i
r = linear_search(i, array, N)
if r == NOT_FOUND
  printf("%dは見つかりません\n", i)
else
  printf("%dは%d番目です\n", i, r)
end

リニアサーチ(番兵つき)

# -*- coding: cp932 -*-

NOT_FOUND = -1
N = 10

def linear_search(x, a, num)
  n = 0
  # 最後の値をxに入れ替える(番兵)
  t = a[num - 1]
  a[num - 1] = x
  while a[n] != x
    n += 1
  end
  # 配列の最後の値を元に戻す
  a[num - 1] = t
  return n if n < num - 1
  return n if x == t
  return NOT_FOUND
end

# 適当な配列を作る
array = []
printf("array ")
for i in (0..N - 1)
  printf("[%d]:%d ", i, array[i] = rand(20))
end
printf("\n何を探しますか:")
i = gets().to_i
r = linear_search(i, array, N)
if r == NOT_FOUND
  printf("%dは見つかりません\n", i)
else
  printf("%dは%d番目です\n", i, r)
end

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。