如何找到在排序数组中插入元素的正确位置?

时间:2014-04-06 01:18:35

标签: java arrays sorting

我必须用Java创建一个程序来按降序创建一个排序数组。当我尝试插入10,3时没关系,但是当我插入10,3,8时,结果是10,8,0。由于某种原因,0出现在最后。此外,当我尝试输入负数-2时,结果变为-2,8,8。有人能帮忙吗?此外,冒泡排序是这种插入的正确方法吗? (对不起我的英文,这是我第一次来这里)。谢谢你的时间。

    private int searchPosition(int a)
    {
        int position = 0;

        for (int i = 0; i < array.length(); i++)
        {
            if(array[i] != a)
            {
                if((array[i] > a) && (array[i + 1] < a))
                {
                    position = i + 1;
                }
            }
            else
            {
                position = i;
            }
        }

        return position;
    }

    public boolean insert(int a)
    {
        int position;
        boolean exists;
        int temp;

        if (size == capacity)
        {
            System.out.println("The array is full.");
            return false;
        }
        else
        {
            exists = //here i call a method to make sure the element to insert doesn't exist in the array

            if (exists == false)
            {
                //Bubble Sort in desceding order
                for (int i = 0; i < array.length(); i++)
                {
                    for (int j=0; j < array.length() - i; j++)
                    {
                        if (array[j] < array[j + 1])
                        {
                            temp = array[j + 1];
                            array[j + 1] = array[j];
                            array[j] = temp;
                        }
                    }
                }
                position = searchPosition(a);
                //move elements one position to the right
                for (int i = array.length(); i < position; i--)
                {
                    array[i] = array[i - 1];
                }
                array[position] = a;
                //place a in the free position
                size++;
                return true;
            }
            else
            {
                System.out.println("The element" + a + " already exists in the array.");
                return false;
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

您可以使用break语句执行此操作,当值小于数组中的值并使用此索引时退出循环。

int value = 8;
for(int i = 0; i < array.length; i++) {
    if(array[i] < value) {
        break;
    }
}

for(int j = array.length; j > i; j--) {
    a[j] = a[j -1];
}
a[j] = value;
size++;