查找算法之二分查找

查找算法

线性查找算法

   有一个数列: {1,8, 10, 89, 1000, 1234} ,判断数列中是否包含此名称【顺序查找】 要求: 如果找到了,就提示找到,并给出下标值。

思路:如果查找到全部符合条件的值。[思路分析.]

全部代码

package com.atguigu.search;

public class SeqSearch {

    public static void main(String[] args) {
        int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组
        int index = seqSearch(arr, -11);
        if(index == -1) {
            System.out.println("没有找到到");
        } else {
            System.out.println("找到,下标为=" + index);
        }
    }

    /**
     * 这里我们实现的线性查找是找到一个满足条件的值,就返回
     * @param arr
     * @param value
     * @return
     */
    public static int seqSearch(int[] arr, int value) {
        // 线性查找是逐一比对,发现有相同值,就返回下标
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == value) {
                return i;
            }
        }
        return -1;
    }

}

二分查找  折半查找

二分查找

   请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} ,输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。

思考: {1,8, 10, 89, 1000, 1000,1234} 当一个有序数组中,有多个相同的数值时,如何将所有的数值都查找到,比如这里的 1000.

思路分析

二分查找的代码

package com.atguigu.search;

import java.util.Arrays;

public class InsertValueSearch {

        public static void main(String[] args) {

        
        int arr[] = { 1, 8, 10, 89,1000,1000, 1234 };
        
        
        int index = binarySearch(arr, 0, arr.length, 1);
        System.out.println("index = " + index);
        
        //System.out.println(Arrays.toString(arr));
        }
        
        public static int binarySearch(int[] arr, int left, int right, int findVal) {
                System.out.println("二分查找被调用~");
                // 当 left > right 时,说明递归整个数组,但是没有找到
                if (left > right) {
                        return -1;
                }
                int mid = (left + right) / 2;
                int midVal = arr[mid];

        if (findVal > midVal) { // 向 右递归
                return binarySearch(arr, mid + 1, right, findVal);
        } else if (findVal < midVal) { // 向左递归
                return binarySearch(arr, left, mid - 1, findVal);
        } else {

        return mid;
        }

        }

}
原文地址:https://www.cnblogs.com/cnng/p/12360787.html