/*
* 顺序查找
* T(n)=O(n)
* S(n)=O(1)
*/
public class TestSearch01 {
public static void main(String[] args){
int[] scoreArr = {89,45,78,78,45,100,98,86,100,65};
int score = 100;
int index = search(scoreArr,score);
if(index==-1){
System.out.print("该分数不存在");
}else{
System.out.print(score+"的索引是"+index);
}
}
public static int search(int[] scoreArr,int score){
for(int i=0;i<scoreArr.length;i++){
if(scoreArr[i]==score){
return i;
}
}
return -1;
}
}
二分查找
public class TestBinarySearch {
public static void main(String[] args){
int[] array = {1,2,3,4,5,6,7,8,9,10};
int key = 6;
int index1 = binary1(array,key);
if(index1==-1){
System.out.print("该分数不存在");
}else{
System.out.println(key+"的索引是"+index1);
}
}
/*
* 不使用递归的二分查找
* T(n)=O(logn)
* S(n)=O(1)
*
*/
public static int binary1(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;
}
/*
* 使用递归查找
* T(n)=O(logn)
* S(n)=O(logn)
*
*/
public static int dbinary2(int[] array,int key){
int low = 0;
int high = array.length-1;
return dbinary2(array,key,low,high);
}
public static int dbinary2(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 dbinary(array, key, low, mid-1);
}else{
return dbinary(array, key, mid+1, high);
}
}
}
本文详细介绍了两种基本的查找算法:顺序查找与二分查找。顺序查找适用于未排序的数组,其时间复杂度为O(n),空间复杂度为O(1);而二分查找则针对已排序的数组,采用迭代与递归两种方式实现,时间复杂度为O(logn),空间复杂度分别为O(1)与O(logn)。通过具体的代码实例,读者可以深入理解这两种查找算法的工作原理。
908

被折叠的 条评论
为什么被折叠?



