版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013383042/article/details/53106339
首先必须明白,折半查找针对的是有序数组。
import java.util.*;
public class searchNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int key = sc.nextInt();
// int[] arr = {5,2,1,9,8,6};//6个元素
// int index = getIndex(arr,key);
int[] arr = {2,6,7,9,15,18,35,39,40,56,66,89,100};//13个元素
// int index = getIndex_2(arr,key);
// int index = halfSearch(arr,key);
// int index = halfSearch_2(arr,key);
int index = Arrays.binarySearch(arr,key);//java提供了一个进行折半查找的函数。开发时使用这个。
System.out.println("元素" + key + "在数组的第" + (index + 1) + "个位置!");
}
//折半查找---针对有序数组
public static int halfSearch(int[] arr,int key){
int min = 0;
int max = arr.length - 1;
int mid = (min + max) >> 1;
while(arr[mid] != key){
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid - 1;
if(min > max)
return -1;
mid = (min + max) >> 1;
}
return mid;
}
//折半查找的第二种方式
public static int halfSearch_2(int[] arr,int key){
int min = 0;
int max = arr.length - 1;
int mid;
while(min <= max){
mid = (min + max) >> 1;
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
//针对有序数组才可使用
public static int getIndex_2(int[] arr,int key){
int min = 0;
int max = arr.length - 1;
int mid;
while(min <= max){
mid = (min + max) >> 1;
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
//返回关键字key在数组arr中的位置,如果不存在则返回-1
public static int getIndex(int[] arr, int key) {
for(int i = 0; i < arr.length; i++){
if(arr[i] == key){
return i;
}
}
return -1;
}
}
原创:http://blog.csdn.net/u013383042/article/details/53106339