順序查找和二分查找

      使用順序查找適用於沒有順序的數據序列,執行速度效率爲: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,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章