java - 练习使用二进制搜索将数据插入数组,问题很少

标签 java arrays insert binary-search

我正在尝试创建一种方法,该方法以二进制形式插入元素然后对其进行排序。

我遇到的问题是我的代码没有正确插入数据,这意味着输出看起来根本没有顺序。

列表没有组织,数据按插入顺序添加。

现在,有 2 个问题,我在这里做错了什么?以及如何解决这个问题?

public void insertBinarySearch(long value) // put element into array
{       
    int j = 0;
    int lower = 0;
    int upper = elems-1;
    int cur = 0;

    while (cur < elems)
    {
        cur = (lower + upper ) / 2;

        if(a[cur] < value)
        {
            j = cur + 1;
            break;
        }
        else if(a[cur] > value)
        {
            j = cur;
            break;
        }
        else
        {
            if(a[cur] < value)
                lower = cur + 1;
            else
                upper = cur - 1;
        }
    }

    for(int k = elems; k > j; k--)
        a[k] = a[k-1];

    a[j] = value;

    elems++;
}

最佳答案

while (lower <= upper)
{
    curIn = (lower + upper ) / 2;

        if(a[curIn] < value)
            lower = cur + 1;
        else if(a[curIn] > value)
            upper = cur - 1;
        else if (a[curIn] == value)
            break;
}
if(a[curIn] <= value)
    j = curIn + 1;
else j = curIn;

应该可以。

关于java - 练习使用二进制搜索将数据插入数组,问题很少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658324/

相关文章:

c# - 最大数组维度,如 a[1][1][1][1]....[1]在 C#

java - 如何将数字数组传递到jsp页面?

mysql - 如何使用连接仅在条件为真时插入?

c# - 如果在 C# 中不存在则插入

java - hibernate : merge detatched instance data in to persistent instance

java - Log4J SQL 日志记录 TopLink

java - Checkmarx、LDAP 注入(inject)和 ESAPI.encodeForLDAP

java - Ant - 设置 ClassPath 对于批量测试不起作用

c - 我需要从一个单词中获取字母

c++ - 为什么我的简单 map.find(x) 不起作用?