顺序查找和二分查找

      使用顺序查找适用于没有顺序的数据序列,执行速度效率为:O(N)。

public class ArrayOrderSearch {
    private long[] data;
    private int num;
    public ArrayOrderSearch(int length){
        num = 0 ;
        data = new long[length];
    }
    public boolean serach(long searchKey){
        for(int i=0;i<num;i++){
            if(searchKey==data[i]){
                return true;
            }
        }
        return false;
    }
    public void insert(long key){
        data[num] = key;
        num++;
    }
    public boolean delete(long key){
        int i;
        for(i=0;i<num;i++){
            if(key==data[i]){
                break;
            }
        }
        if(i == num){
            return false;
        }else{
            for(int j=i;j<num;j++){
                data[j] = data[j+1];
            }
            num--;
            return true;
        }
    }
    public void display(){
        for(int i=0;i<num;i++){
            System.out.print(data[i]+",");
        }
    }
    public static void main(String[] args) {
        int length = 50;
        ArrayOrderSearch aos = new ArrayOrderSearch(length);
        aos.insert(20);
        aos.insert(30);
        aos.insert(10);
        aos.insert(80);
        aos.insert(50);
        aos.insert(60);
        aos.display();
        System.out.println("");
        long searchKey = 80;
        if(true==aos.serach(searchKey)){
            System.out.println("找到:"+searchKey);
        }else{
            System.out.println("没有找到");
        }
        System.out.println("");
        aos.delete(searchKey);
        if(true==aos.serach(searchKey)){
            System.out.println("找到:"+searchKey);
        }else{
            System.out.println("没有找到");
        }
        System.out.println("");
        aos.delete(10);
        aos.delete(20);
        aos.display();
    }
}

执行结果为:

20,30,10,80,50,60,
找到:80

没有找到

30,50,60,

      二分查找适用于已经排好序的数据序列,执行效率为(logN)。

package date20171009;

public class ArrayBinarySearch {
    private long[] data;
    private int num;
    public ArrayBinarySearch(int length){
        num = 0 ;
        data = new long[length];
    }
    public int getsize(){
        return num;
    }
    public long serach(long searchKey){
        int lowerBound = 0;
        int upperBound = num-1;
        int curValue=0;
        while(true){
            if(data[curValue]==searchKey){
                return curValue;
            }
            else if(lowerBound>=upperBound){
                return num;
            }
            else{
                curValue = (lowerBound+upperBound)/2;
                if(searchKey>data[curValue]){
                    lowerBound = curValue + 1;
                }else{
                    upperBound = curValue - 1;
                }
            }
        }

    }
    public void insert(long key){
        data[num] = key;
        num++;
    }
    public boolean delete(long key){
        int i;
        for(i=0;i<num;i++){
            if(key==data[i]){
                break;
            }
        }
        if(i == num){
            return false;
        }else{
            for(int j=i;j<num;j++){
                data[j] = data[j+1];
            }
            num--;
            return true;
        }
    }
    public void display(){
        for(int i=0;i<num;i++){
            System.out.print(data[i]+",");
        }
    }
    public static void main(String[] args) {
        int length = 50;
        ArrayBinarySearch abs = new ArrayBinarySearch(length);
        abs.insert(10);
        abs.insert(20);
        abs.insert(30);
        abs.insert(40);
        abs.insert(50);
        abs.insert(60);
        abs.insert(70);
        abs.insert(80);
        abs.insert(90);
        abs.display();
        System.out.println("");
        long searchKey = 80;
        if(abs.getsize()>abs.serach(searchKey)){
            System.out.println("找到:"+searchKey);
        }else{
            System.out.println("没有找到");
        }
        System.out.println("");
        abs.delete(searchKey);
        System.out.println(abs.getsize());
        System.out.println(abs.serach(searchKey));
        if(abs.getsize()>abs.serach(searchKey)){
            System.out.println(123);
            System.out.println("找到:"+searchKey);
        }else{
            System.out.println("没有找到");
        }
        System.out.println("");
        abs.delete(10);
        abs.delete(20);
        abs.display();
    }
}

执行结果为:
10,20,30,40,50,60,70,80,90,
找到:80

8
8
没有找到

30,40,50,60,70,90,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值