黑马程序员——Java基础查找算法:顺序查找和二分查找

时间:2022-07-13 11:01:20

——- android培训java培训、期待与您交流! ———-
/*
需求:在数组中查找指定的数据
一、顺序查找法思路:
遍历整个数组,将指定要找的数与数组中的所有元素比较,如果相同则返回下标,没有找到返回-1
*/

public static int shunXu(int x, int[] arr)
    {
        for(int i =  1;i <arr.length;i++)
        {
            if(x == arr[i])
                return i;
        }
        return -1;        
    }

二、折半查找法思路:
1.取出数组元素的开始、结束和中间元素的下标。
2.循环比较中间元素和要查找数据的大小如果查找的数据大于中间元素,表示又查找的数
据不可能在前边段,将开始元素下标设为中间元素的下一位,缩短查询范围;如果查找的
数据小于中间元素,将结束元素下标设为中间元素的前一位。如果开始元素下标大于结束
元素下标时还未找到目标元素,表示数组中没有该元素。
步骤:
1.定义三个变量用于存储数组元素的开始、结束和中间元素的下标。
2.使用while循环语句,通过变化开始或者结束元素下标,寻找与目标数据相同的元素,
循环控制条件是:开始元素下标小于结束元素下标。
3.如果查找的数据等于中间元素,返回中间元素的下标;如果查找的数据大于中间元素,
将开始元素下标设为中间元素的下一位;如果查找的数据小于中间元素,将结束元素下
标设为中间元素的前一位。
4.跳出循环的话,表示数组中没有该元素,返回-1

public static int erFen( int x, int[] arr)
    {
        int low = 0;
        int high = arr.length-1;//最后一个元素的下标
        int mid = (low+high)/2;
        while(low<=high)
        {
            if(x == arr[mid])
                return mid;
            else if (x < arr[mid])
                high = mid-1;  //去掉后半截
            else if(x > arr[mid])
                low = mid+1; //去掉前半截
        }
        return -1;   //数组中没有该元素
    }

三、验证代码

class ChaZhao 
{
    public static void main(String[] args) 
    {
        int[] col = {5,52,23,2,8,95,30};
        daYin(col);   
        //使用冒泡排序法排序
        bubbleSort(col);
        System.out.println("--------------------------------");
        daYin(col);   
        int key = shunXu(52,col)+1;
        System.out.println("52是数组col第"+key+"个元素");
    }
        //冒泡排序法
    public static void bubbleSort(int[] arr)
    {
        for(int i = 1;i < arr.length ;i++)
        {
            for(int j = 0; j < arr.length-i; j++)
            {
                if(arr[j] > arr[j+1])
                {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
}

结果如下图
黑马程序员——Java基础查找算法:顺序查找和二分查找

——- android培训java培训、期待与您交流! ———-