为什么向大小为N的有序数组插入一个新元素在最坏情况下需要访问2N次数组?

发布于 2022-09-02 01:56:01 字数 1498 浏览 9 评论 0

public class BinarySearchST<Key extends Comparable<Key> , Value>
{
    private Key[] keys ;
    private Value[] values ;
    private int N ;

    public BinarySearchST(int capacity)
    {
        keys = (Key[]) new Comparable[capacity] ;
        values = (Value[]) new Object[capacity] ;
    }

    public Value get(Key key)
    {
        if(isEmpty())
            return null ;
        int i = rank(key) ;

        if(i<N && keys[i].compareTo(key) == 0)
            return values[i] ;
        else
            return null ;
    }

    public void put(Key key , Value value)
    {
        int i = rank(key) ;

        if(i<N && keys[i].compareTo(key) == 0)
        {
            values[i] = value ;
            return ;
        }
        for(int j=N ; j>i ; j--)
        {
            keys[j] = keys[j-1] ;
            values[j] = values[j-1] ;
        }
        keys[i] = key ;
        values[i] = value ;
        N++ ;
    }

    public int rank(Key key)
    {
        int lo = 0 ;
        int hi = N-1 ;
        while(lo <= hi)
        {
            int mid  = lo + (hi - lo)/2 ;
            int cmp = key.compareTo(keys[mid]) ;
            if(cmp < 0)
                hi = mid - 1 ;
            else if(cmp > 0)
                lo = mid + 1 ;
            else
                return mid ;
        }

        return lo ;
    }
}

书上说“向大小为N的有序数组中插入一个新元素在最坏情况下需要访问2N次数组”,这是为什么?
我理解的是N次访问在Key数组,另外N次的访问在Value数组,这么想对吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如若梦似彩虹 2022-09-09 01:56:01

你的binsearch写的不对吧. (0, 2, 4) 插入 1, 结果得到 (1, 0, 2, 4)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文