数组元素的查找(折半查找)

来源:互联网 发布:图形算量软件 编辑:程序博客网 时间:2024/05/16 09:26
/*     数组的查找      折半查找:前提是该数组是有序的数组 */import java.util.Scanner;public class arrLookup{    public static void main(String[] args){        int[] arr = {1,4,6,8,34,56,78};        System.out.println("Please enter the number you want to find:");        Scanner in = new Scanner(System.in);        int number = in.nextInt();                //halfSearch        int index = halfSearch(arr, number);        System.out.println("index = "+index);        //halfsearch_2        int index_2 = halfSearch_2(arr, number);        System.out.println("index_2 = "+index_2);                //练习:将元素有序插入数组        Scanner in_1 = new Scanner(System.in);        int number_1 = in_1.nextInt();        int index_3 = getIndex(arr, number_1);        System.out.println("index_3 = "+index_3);                }        //折半查找    public static int halfSearch(int[] arr, int key){        int min = 0;        int max = arr.length-1;        int mid = (min+max)/2;        //判断是否找到key        while(key != arr[mid]){            if(key > arr[mid])    //key大于中间值,把中间值后一个角标赋值给min,max不变                min = mid+1;            else if(key < arr[mid])    //key小于中间值,把中间值前一个角标赋值给max,min不变                max = mid-1;                        if(min > max)    //如果min>max,说明该数组内没有key                return -1;    //该数组没有key                        mid = (min+max)/2;    //折半        }        return mid;        }        //第二种折半查找    public static int halfSearch_2(int[] arr, int key){        int min = 0;        int max = arr.length-1;        int mid;        //判断min是否小于等于max        while(min <= max){            mid = (min+max)>>1;            if(key > arr[mid])                min = mid+1;            else if(key < arr[mid])                max = mid-1;            else if(key == arr[mid])    //找到key,返回角标                return mid;        }        return -1;            }        //练习:将元素有序插入数组    public static int getIndex(int[] arr, int key){        int min = 0;        int mid;        int max = arr.length-1;        while(min <= max){            mid = (min+max)>>1;            if(key > arr[mid])                min = mid+1;            else if(key < arr[mid])                max = mid-1;            else if(key == arr[mid])                return min;        }        return min;    }}
0 0
原创粉丝点击