我在向已经按字母顺序排列的数组中添加项目时遇到问题

时间:2011-04-25 19:42:51

标签: java arrays

到目前为止,我已经有了下面的内容,但是我如何确保要添加的项目返回到它的按字母顺序排列的位置? 我是初学者班,所以我不能使用ArrayLists或与它们相关的方法。

任何形式的帮助或推动正确的方向将不胜感激。谢谢!

该方法应遵循以下说明:

     - Adds an item to the list.  This method assumes that the list is already
      sorted in alphabetical order based on the names of the items in the list.

     - The new item will be inserted into the list in the appropriate place so
      that the list will remain alphabetized by names.

      In order to accommodate the new item, the internal array must be re-sized 
      so that it is one unit larger than it was before the call to this method.


public void add(Listable itemToAdd) {
         Listable[] items1;
         int newlength = items.length+1;
         items1 = new Listable [newlength];
         for(int i = 0;i<items.length;i++){
             items1[i] = items[i];
             items1[newlength-1] = itemToAdd;
         }
    }   

2 个答案:

答案 0 :(得分:1)

一开始就不错!我们需要做很多事情。这一行

items1[newlength-1] = itemToAdd;

需要退出循环,并在之后放置 - 你只需将一些数组元素设置为此值,是,不是很多次?

复制部分是一个好的开始。你需要做的是

  1. 找到新元素应该去的位置(搜索数组,找到新元素应该去的元素)
  2. 复制之前新元素
  3. 的元素
  4. 复制新元素
  5. 复制之后新元素的元素(调整它们的索引,因为它们都比以前更晚了!)
  6. 有意义吗?

答案 1 :(得分:1)

如果你是初级班,你可能已经了解insertion sort。插入排序的一个有趣特性是尽管在平均情况下运行时间很差( O(n 2 ),但它在最佳情况下的性能(排序列表)事实上,非常好 - O(n)。几乎排序的列表将在相同的效率类中运行。这可能是一种完成你想要做的事情的方法。 (它也可能是您使用插入排序的少数几个地方之一,因此请充分利用它。)