/****************************/ /* 二分探索法 */ /* coded by Y.Suganuma */ /****************************/ import java.io.*; import java.util.*; public class Test { public static void main (String args[]) { int i1, res_n, res_c, key_n, data_n [] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; String key_c, data_c[] = {"eeeee", "ddddd", "ccccc", "bbbbb", "aaaaa"}; // 探索キー key_n = Integer.parseInt(args[0]); key_c = args[1]; // 整数の場合 res_n = search(key_n, data_n, 10); if (res_n > 0) System.out.print(" " + key_n + " が見つかりました\n"); else System.out.print(" " + key_n + " は見つかりませんでした\n"); // 文字列の場合 res_c = search(key_c, data_c, 5); if (res_c > 0) System.out.print(" " + key_c + " が見つかりました\n"); else System.out.print(" " + key_c + " は見つかりませんでした\n"); } /**************/ /* 整数の場合 */ /**************/ static int search(int key, int data[], int n) { int sw = 0, left = 0, right = n-1, center; if (data[right] > data[left]) { while (left < right) { center = (left + right) / 2; if (data[center] < key) left = (center < n-1) ? center + 1 : center; else right = center; } } else { while (left < right) { center = (left + right) / 2; if (data[center] > key) left = (center < n-1) ? center + 1 : center; else right = center; } } if (data[left] == key) sw = 1; return sw; } /****************/ /* 文字列の場合 */ /****************/ static int search(String key, String data[], int n) { int sw = 0, left = 0, right = n - 1, center; if (data[left].compareTo(data[right]) < 0) { while (left < right) { center = (left + right) / 2; if (data[center].compareTo(key) < 0) left = (center < n-1) ? center + 1 : center; else right = center; } } else { while (left < right) { center = (left + right) / 2; if (data[center].compareTo(key) > 0) left = (center < n-1) ? center + 1 : center; else right = center; } } if (data[left].compareTo(key) == 0) sw = 1; return sw; } }