【问题标题】:Sort an array as values are inputted into the array在将值输入数组时对数组进行排序
【发布时间】:2016-10-02 19:21:58
【问题描述】:

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

数组一开始是空的。

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

这是我目前拥有的代码。

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是向上移动一个索引。

【问题讨论】:

  • 提示了解您在该代码中的问题是什么;我们需要了解您如何设置整个事情。索引/计数如何获得它们的值?!看到索引在某些情况下可能

标签: java arrays sorting


【解决方案1】:

您可能希望循环执行以下操作:

  1. 移动具有索引 > 索引的元素,以便为新元素腾出空间,并且
  2. 然后将元素添加到给定索引。
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

【讨论】:

  • 谢谢。那行得通。从数组的末尾向下工作肯定比我尝试做的更有意义。
  • 当然!乐于助人
  • @FiftySentos 请将此答案标记为“正确”,以便 Jainul 得到应有的赞誉,其他有相同问题的人也能轻松找到它。
  • 如果达到当前长度,您可能需要重新创建更大的数组。顺便说一句,“Arraylist”就是这样工作的,将数组保持在内部并在达到当前容量时将其长度加倍。
【解决方案2】:

你可以这样做:

首先,你需要

  1. 一个计数器,告诉您还有多少“未使用”的数组元素;如果你最终发现你的数组是“满的”
  2. 留意索引,避免超出数组长度

那么就真的很简单了:

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

【讨论】:

    【解决方案3】:

    您似乎正试图将数组元素朝错误的方向移动。

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

    arr[0] = arr[1];
    

    当您可能想要相反时。

    【讨论】:

    • arr[index + i + 1] = arr[index + i] 会变成arr[1] = arr[0]?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2011-01-22
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    相关资源
    最近更新 更多