在将值输入到数组中时对数组进行排序

时间:2016-10-02 19:21:58

标签: java arrays sorting

如果新添加的值低于现有值,我需要一个循环来帮助移动数组的元素,因此在输入新值时对数组进行排序。

数组以空开头。

我尝试了几个循环,但它们似乎不适用于我的情况,因为它们是用于已经满的数组的循环。

以下是我目前的代码。

if(index < 0)
    index = -(index + 1);

if(arr[index] > key)
    for(int i = 0; i < count -1; i++) {
        arr[index + i] = arr[index + i + 1];
    }

arr[index] = key;

索引来自二元搜索。

例如,如果我先输入80,则需要arr[0]的插槽。然后我输入45,它也将占用arr[0]

的插槽

由于45,key,小于现有的arr [0](80),80是向上移动索引。

3 个答案:

答案 0 :(得分:2)

您可能需要循环以便执行以下操作:

  1. 使用索引&gt;移动元素索引,以便为新元素和
  2. 创建空间
  3. 然后将元素添加到给定索引。
  4. for (int  i = count; i > index; i--) {
        arr[i] = arr[i - 1]; // shifts the elements to the one place right
    }
    arr[index] = key; // add the key to the given index
    

    注意:count是数组中当前元素的数量,它小于arr.length

答案 1 :(得分:1)

你可以选择这样的东西:

首先,你需要

  1. 一个计数器,告诉你剩下多少“未使用的”数组元素;没有必要交换索引1到2,2到3,...如果你最终发现你的阵列是“满的”
  2. 密切关注索引,以避免超出数组的长度
  3. 然后它很简单:

    • 您迭代当前数组以查找大于
    • 的第一个索引(在此处称之为 n
    • 然后转到最后一个“正在使用”的数组索引...并从那里开始向右移动值
    • 最后,将arr [n]移动到arr [n + 1]之后;你指定arr [n] = key

答案 2 :(得分:0)

看起来你正在尝试将数组元素向错误的方向移动。

鉴于index = 0i = 0,您最终会得到:

arr[0] = arr[1];

当你可能想要反过来时。