数据结构 有序数组java篇

一:有序数组特点:
1:有序数组特点:查询快,插入,删除慢,适合查询多,修改少的环境
2:查询时间复杂度O(log(n)),插入,删除时间复杂度O(n)
3 : 插入平均需要比较n/2 次,移动n/2个元素
4 : 删除是先查找,然后移动n/2个元素

二:二分查找思想
假设有n个元素的有序数组,取数组中间位置的值与检索值比较,如果小于中间值,则利用二分查找在前半部分的有序数组中查找,如果大于中间值,则利用二分查找在前半部分的有序数组中查找,如果相等,则返回索引位置,否则没有找到. 二分查找需要不断的缩小查询的范围。

public class HalfSort {
    private int[] aint;
    private int size;

    public HalfSort(int size) {
        aint = new int[size];
        size = 0;
    }

    public void insert(int value) {
        int x;
        for(x = 0 ; x < size; x++) {
            if(aint[x] > value) {
                break;
            }
        }

        //移动数据
        for(int y = size; y > x; y--) {
            aint[y] = aint[y-1];
        }

        aint[x] = value;
        size ++;
    }

    public boolean delete(int key) {
        int keyIndex = find(key);
        if(keyIndex == -1) {
            return false;
        } else {
            for(int x = keyIndex; x < size; x++ ) {
                aint[x] = aint[x+1];
            }
            size --;
            return true;
        }

    }

    //时间复杂度O(log(N))  
    public int find(int key) {
        int low = 0;
        int up = size - 1;
        int middle = 0;

        while(true) {
            middle = (up + low)/2;

            if(aint[middle] == key) {
                return middle;
            } else if(low > up) {
                return -1;
            } else {
                if(aint[middle] > key) {
                    up = middle - 1;
                } else {
                    low = middle + 1;
                }
            }
        }
    }

    public void display() {
        for(int x = 0; x < size ; x++) {
            System.out.print(aint[x] + " ");
        }
        System.out.println("");
    }

    public static void main(String[] args) {
        HalfSort sort = new HalfSort(10);
        sort.insert(10);
        sort.insert(3);
        sort.insert(20);
        sort.insert(17);
        sort.insert(13);
        sort.insert(31);
        sort.insert(25);

        sort.display();

        int ind = sort.find(10);
        sort.delete(20);

        sort.display();
    }

}

猜你喜欢

转载自blog.csdn.net/winer1220/article/details/49865753