一、二分查找
要求:顺序结构,按照关键字排序。
1、不使用递归
package com.item.javese;
public class TestSearch {
public static void main(String[] args) {
int [] array = {1,2,3,4,5,6,7,8,9,10};
int key = 10;
// 对于给定的数组和值进行二分查找
int index = binarySearch(array,key);
if(index==-1){
System.out.println("不存在");
}else {
System.out.println(key+"的索引是"+index);
}
}
public static int binarySearch(int [] array, int key){
/*
*不使用递归
*/
int low = 0;
int high = array.length-1;
while (low<=high){
int mid = (low+high)/2;
if(key==array[mid]){
return mid;
}else if(key<array[mid]){
high = mid -1;
}else {
low = mid +1;
}
}
return -1;
}
}
2、使用递归
package com.item.javese;
public class TestSearch2 {
public static void main(String[] args) {
int [] array = {1,2,3,4,5,6,7,8,9,10};
int key = 10;
// 对于给定的数组和值进行二分查找
int index = binarySearch(array,key);
if(index==-1){
System.out.println("不存在");
}else {
System.out.println(key+"的索引是"+index);
}
}
public static int binarySearch(int [] array, int key){
int low = 0;
int high = array.length-1;
return binarySearch(array,key,low,high);
}
public static int binarySearch(int[] array,int key, int low, int high){
//递归的结束条件
if(low > high){
return -1;
}
int mid = (low+high)/2;
if(key == array[mid]){
return mid;
}else if(key < array[mid]){
return binarySearch(array,key,low,mid-1);
}else {
return binarySearch(array, key, mid+1, high);
}
}
}