2016校招真题

来源:互联网 发布:淘宝分享有赏红包 编辑:程序博客网 时间:2024/05/17 04:31

对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。

给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:

[1,3,5,7,9],5,3

返回:1

public class BinarySearch {    public static void main(String args[]){        Scanner in=new Scanner(System.in);        int n=in.nextInt();        int val=in.nextInt();        int a[]=new int[n];        for(int i=0;i<n;i++){            a[i]=in.nextInt();        }        int copya[]=new int[n];        for(int i=0;i<n;i++){            copya[i]=a[i];        }        copya=Sort(copya,n);        int index=getPos(copya,n,val);        if(index==-1){            System.out.println(index);        }else{            for(int i=0;i<n;i++){                if(copya[index]==a[i]){                        System.out.println(i);                        break;                }            }        }           }    //二分查找    public static int getPos(int[] a, int n, int val) {        int left=0,right=n-1,mid;        while(left<=right){            mid=left+(right-left)/2;            if(a[mid]==val) return mid;            if(a[mid]>val){                right=mid-1;            }            if(a[mid]<val){                left=mid+1;            }        }        return -1;    }       public static int[] Sort(int arr[],int n){        int i,j,v;        for(i=0;i<n;i++){            for(j=0;j<n;j++){                if(arr[i]<arr[j]){                    v=arr[i];                    arr[i]=arr[j];                    arr[j]=v;                }            }        }        return arr;    }}

那个系统我也是醉了,运行结果和它说得一样,它硬是要说我错了,况且是真的没错啊我觉得,心烦意乱。

0 0
原创粉丝点击