2016-10-02 116 views
4

我需要一个循环的帮助,如果新添加的值低于现有值,那么这个循环将会移动数组的元素,所以当数组被输入新值。当数组输入到数组时,对数组进行排序

该数组是空的开始。

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

这是我现在的代码。

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

+0

提示,以了解该代码的问题是什么;我们需要了解你如何设置整个事情。索引/计数如何获得它们的值?看到索引在某些情况下可能<0,真是令人困惑?! – GhostCat

回答

2

,以免它下面的您可能希望在循环:

  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 

注:数量是数组中元素的当前数,并且小于arr.length

+0

谢谢。这工作。从阵列末端开始向下工作,肯定比我想要做的更有意义。 – FiftySentos

+0

当然!乐意帮忙 – Moonstruck

+2

@FiftySentos请将此答案标记为“正确”,以便Jainul获得应有的荣誉,而其他具有相同问题的人很容易找到答案。 – Thomas

0

它看起来像你试图在错误的方向上移动你的数组元素。

鉴于index = 0i = 0,你最终用:

arr[0] = arr[1]; 

当你可能要倒过来。

+0

'arr [index + i + 1] = arr [index + i]'会使它成为'arr [1] = arr [0]'? – FiftySentos

1

你可以去这样的事情:

首先,你需要

  1. ,告诉你很多“未使用”数组元素是如何离开的计数器;如果您最终发现您的阵列“已满”,则将索引1切换到2,2到3没有意义。
  2. 请注意索引,以避免超出数组长度

然后,它是非常简单的:

  • 您遍历当前的阵列发现的第一个索引(可以称之为ñ这里)是大于关键
  • 然后打开到最后一个数组索引是“在使用中“...并开始将值从右边移动到右边
  • 最后,在将arr [n]移动到arr [n + 1]后;您指定的常用3 [N] =键