线性查找算法和二分查找算法
public class FindSortTest {
/**
* 1.线性查找算法:自定义方法
* @param arr
* @param data
* @return
*/
// 从指定数组中查找参数指定的数据内容并返回下标(因为我要类名的调用所以这里用static)
// 如果查到了,代表查找成功 ,反之失败
public static int find(int[] arr, int data){
for(int i=0; i< arr.length;i++){
if(data ==arr[i]){
return i;//表示查找成功
}
}
// 表示查找失败,因为下标是从0开始,所以返回-1代表查找失败
return -1;
}
/**
* 2.二分查找算法:
* 从指定的数组中查找指定的数据内容并返回下标
* int left, int right 代表左右两边的下标,他俩相加除以2就是中间元素的下标
* 0+3 中间元素就是1呗
* @param
*/
public static int findBinary(int[] arr, int left, int right, int data){
// 5.直到目标元素与所有需要比较的元素全部比较完毕也不相等,则查找失败
// 直到最后比较到left=right的时候下标为1的时候,若left不在小于right的
// 时候再比较就没有可比性了
if(left <= right){
// 1.计算中间元素的下标, 左右两边元素的下标相加除以2
int p = (left + right)/2;
// 2.若目标元素与中间元素相等 , 则表示查找成功, 则直接返回下标
if(data==arr[p]){
return p; //查找成功
}
// 3.若目标元素与小于中间元素, 则去中间元素左边查找 , 使用递归思想
if (data < arr[p]){
return findBinary(arr,left,p-1, data);
}
// 4.若目标元素大于中间元素 , 则去中间元素右边查找 , 使用递归思想
return findBinary(arr, p+1, right, data);
}
// 5.直到目标元素与所有需要比较的元素全部比较完毕也不相等,则查找失败
return -1;
}
public static void main(String[] args) {
// 1.线性查找算法测试:
// 例如:有此数组
// int[] brr= {10,20,30,40,50};
// int num= 20;//假如说查找20这个元素
// // 返回的是下标(索引)
// int res = FindSortTest.find(brr,num);
// if(-1 ==res){//-1索引不存在
// System.out.println("元素" + num + "不存在");
// }else{
// System.out.println("元素" + num + "在数组的下标为:" + res);
// }
System.out.println("----------------------------------------------------");
int[] brr= {10,20,30,40,50};
int num= 20;//假如说查找20这个元素
// 返回的是下标(索引)
int res = FindSortTest.findBinary(brr,0,4,num);
if(-1 ==res){
System.out.println("元素" + num + "不存在");
}else{
System.out.println("元素" + num + "在数组的下标为:" + res);
}
}
}