如何按字母顺序插入ArrayList <string>?

时间:2017-03-24 22:02:00

标签: java insertion-sort

首先,我会说这是家庭作业,我想帮助而不是直接回答。因为它是家庭作业而不是真正的应用程序,所以我仅限于以下课程:

java.util.ArrayList
java.util.Scanner

对于我的AP计算机科学课程,我创建的程序将通过System.in接受名称并将其输入ArrayList<String>,然后按字母顺序对它们进行排序。 我已经完成了所有工作,但我的插入排序似乎只是按名字排序,而不是按字母顺序排列。

以下是我目前的插入排序方法。

public static ArrayList<String> doInsertionSort(ArrayList<String> a) { //helper method that performs an insertion sort upon an ArrayList<String>.

      String temp; //temporary string for holding data.

      for(int i = 1; i < a.size(); i++) { //One major sweep occurs, with sorting pulses working backwards.
                                          //NOTE:Starts at position 1 of ArrayList<String> so that j-1 doesn't throw OutOfBounds exception.
                                          //Besides, there would be nothing to swap position 0 of ArrayList<String> in this particular inserton sort.

          for(int j = i; j > 0; j--) {  //starts at position i in ArrayList<String> and works backwards.

              if(a.get(j).charAt(0) < a.get(j - 1).charAt(0)) {  //if the String at position j is less than the string behind it, 
                                                                 //swap the two. This keeps happening until position 0 is reached.
                  temp = a.get(j);
                  a.set(j, a.get(j-1));
                  a.set(j-1, temp);
              }
          }
      }
      return a;
  }   //end doInsertionSort

我使用以下数据测试了我的排序算法:

z
Mariah
Carrie
cHaRlOtTe
caRl
joSe
johnathan

[Carrie, Charlotte, Carl, Jose, Johnathan, Mariah, Z]

是我的输出,应该是

[Carl, Carrie, Charlotte, Johnathan, Jose, Mariah, Z]

我100%完成了作业(我们从在线java课程“学习”,附带一个方便的花花公子提交来评估源代码)但我对结果不满意,因为我没有设法得到一个完美的字母排序。

我只是不太确定如何告诉java如何按字母顺序排序。

感谢您的帮助。

编辑:很多人都指出String包含的方法compareTo()正是我所寻找的,虽然我不确定是谁给出了最佳答案。

3 个答案:

答案 0 :(得分:0)

String.compareTo()函数按字母顺序比较字符串。

a.compareTo(b)如果字符串相等则返回0,如果1按字母顺序返回a > b,否则返回-1

所以你可以通过使用compartTo比较字符串来删除你的内循环,它循环抛出字符串并比较它们的字符,使用charAt。

答案 1 :(得分:0)

答案 2 :(得分:0)

我认为您需要查看的代码行是:

if(a.get(j).charAt(0) < a.get(j - 1).charAt(0))

想想这是比较a.get(j)是一个字符串而a.get(j-1)是一个字符串所以最后一部分在做什么?