【<算法>从零开始】20190714-2

160 阅读1分钟

经典的二分查找//java

import java.util.Arrays;
public class BinarySearch
{
    public static int rank(int key, int[] a) //a为序列,key为查找的键值
    {
        //a必须是有序数组
        int lo=0;
        int hi=a.length-1;
        while(lo<=hi){
            //若没有报错,则一定在a[lo..hi]中
            int mid=lo+(hi-lo)/2;
            if (key<a[mid]){ hi=mid-1;}
            if (key>a[mid]){ lo=mid+1;}
            else {return mid;}
        }
        return -1;//报错
    }
    
    public static void main(String args[]){
        int[] whitelist = In.readInts(args[0]);
        Arrays.sort(whitelist);
        while(!StdIn.isEmpty())
        {int key=StdIn.readInt();
        if (rank(key, whitelist)<0 )//即报错的情况
        {StdOut.printIn(key);}
        //即当输入的白名单文件中没有key时打印出来
        }
        
    }
}