#/*********************************************************** # select.rb -- 選択 #***********************************************************/ def select(a, n, k) left = 0; right = n - 1 while (left < right) x = a[k]; i = left; j = right while (true) while (a[i] < x); i += 1; end while (x < a[j]); j -= 1; end if (i > j); break; end t = a[i]; a[i] = a[j]; a[j] = t i += 1; j -= 1 end if (j < k); left = i; end if (k < i); right = j; end end return a[k] end N = 10 a = [] for i in 0...N a[i] = rand * 100 + 1 printf(" %d", a[i]) end printf("\n") begin printf("小さい方から数えて何番目のものを求めますか? ") k = gets.to_i end while (k < 1 || k > N) printf(" %d番目 = %d\n", k, select(a, N, k - 1)) exit 0