無秩序(ソートされていない)配列二分検索
1825 ワード
二分検索は折半検索とも呼ばれます(Binary Search)は、効率の高い検索方法です.しかし、半減検索では、線形テーブルは順序格納構造を採用しなければなりません.また、テーブル内の要素はキーワード順に並べられています.しかし、無秩序配列については、まず2点に並べ替えることができますが、速い配列の考え方を組み合わせることもできます.つまり、キーワードを選択するたびに、彼より大きい数を先に置くことです.その右側、彼より小さい数を左側に置いて、検索する数との関係を比較し、次の反復の区間を選択します.
public class BinarySearch {
/**
*
* @param arr
* @param left
* @param right
* @param key
* @return
*/
public static int binarySearch(Integer[] arr, int left, int right, Integer key) {
if(left < right) {
int partition = partition(arr, left, right);
if(key < arr[partition]) {
return binarySearch(arr, left, partition - 1, key);
} else if (key > arr[partition]) {
return binarySearch(arr, partition + 1, right, key);
} else {
return partition;
}
}
return 0;
}
/**
*
* @param arr
* @param left
* @param right
* @return
*/
public static int partition(Integer[] arr, int left, int right) {
int temp = left - 1;
for(int i = left; i < right; i++) {
if(arr[i] < arr[right]) {
temp++;
swap(arr, temp, i);
}
}
swap(arr, temp + 1, right);
return temp + 1;
}
/**
*
* @param arr
* @param i
* @param j
*/
public static void swap(Integer[] arr, int i, int j) {
Integer temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args){
Integer[] arr = {8, 6, 2, 3, 2, 9, 1, 5, 7};
System.out.println(binarySearch(arr, 0 ,arr.length - 1, 2));
System.out.println(Arrays.asList(arr));
}
}