常见的查找方法:顺序查找和折半查找(二分查找)

(1)顺序查找

也就是按顺序一位一位的查找

public static void main(String[] args) {
    System.out.println("输入一个数");
    Scanner scan = new Scanner(System.in);
    int num= scan.nextInt();

    int[]arr = {2,4,6,8,10,12,14,16};

    int sign= find(arr,num);

   if(-1 == sign){
       System.out.println("没有找到");
   }else {
       System.out.println(sign);
   }
}

/**
 
* 数组查找与num相等的数
 
* @param arr 待查找数组
 
* @param num 待比较的数
 
* @return -1:没有找到  >=0:下标
 
*/
private static int find(int[] arr, int num) {
    int count= 0;
    for (int i:arr){
        if(i== num){
            returncount;
        }
        count++;
    }
    return -1;
}

弊端:数据量大的时候,在最差的情况下,计算机的负载也非常大,效率低。

 

(2)折半查找(二分查找)

public static void main(String[] args) {
    System.out.println("输入一个数");
    Scanner scan = new Scanner(System.in);
    int num= scan.nextInt();

    int[]arr = {2,4,6,8,10,12,14,16};

    int index= halfOfFind(arr,num);

    if(-1 == index){
        System.out.println("没找到");
    }else {
        System.out.println(index);
    }
}

/**
 
*
 * @param arr 待查找数组
 
* @param num 待比较的数
 
* @return -1:没找到 >=0:下标
 
*/
private static int halfOfFind(int[] arr, int num) {
    int start= 0;
    int end= arr.length-1;
    while (start<=end){
        int mid= (start+end)/2;
        if(arr[mid]== num){
            returnmid;
        }elseif(arr[mid] > num){
            end = mid-1;
        }else{
            start = mid+1;
        }
    }
    return -1;
}

弊端:必须对有序的数组进行操作


猜你喜欢

转载自blog.csdn.net/qq_38314823/article/details/80478941
今日推荐