2016-01-30 39 views
1

所以我有一个arraylist,我想我需要为编程类的插入排序算法进行排序。我有一个包含这些字符串的=(安德鲁,菲利普,胡安,卡米尔,JHON,威廉),我有这样的Java代码,这和ArrayList:在ArrayList中插入排序Java算法字符串

public void insertionSort() 
    { 

     ArrayList<Reserve> array = giveReserves(); 

     for(int i = 1 ; i < array.size()-1; i++) 
     { 
      Reserve element = array.get(i); 
      String nomI = element.giveNameClient(); 
      int j = i; 
      String nomJM = array.get(j-1).giveNameClient(); 
      String nomJ = array.get(j).giveNameClient(); 
      while(j > 0 && (nomJM.compareTo(nomJ) > 0)) 
      { 
       Reserve temp = array.get(j); 
       array.set(j, array.get(j-1)); 
       array.set(j-1, temp); 
       j = j-1; 
      } 
     } 
    } 

所以我有了储备的的ArrayList的酒店,每个储备有做它的客户的名字。我想要做的是按客户名称对Reserve ArrayList进行排序。

所以我有打印每名客户,这样的方法:在我整理,然后进行排序之前打印客户的名称main()方法

public void showNames() 
    { 
     for(Reserve x: reserves) 
     { 
      System.out.print(x.giveNameClient() +" "); 
     } 
    } 

。顺便说一句储备的数组列表是在一个名为测试类。

public static void main(String args[]) 
    { 
     Test object = new Test(); 
     System.out.println("Names: "); 
     object.showNames(); 
     object.insertionSort(); 
     System.out.println(); 
     System.out.println("after sorting: "); 
     object.showNames(); 
    } 

现在,当我编译此,我得到如下:

Names: 
Juan Jhon Camil William Andrew Felip 
after sorting: 
Andrew Camil Jhon Juan William Felip 

的事情是,输出应该是安德鲁·卡米尔菲利普JHON胡安威廉

感谢。

+0

检查你的循环条件。你忽略了列表中的最后一个元素 – Eran

+0

是的我知道我忽略了最后一个元素,但我不明白为什么 – ravelinx

+0

请参考[this](http://webthanga.blogspot.in/2016/02/generic-type-in​​sertion -sort-this-below.html)对于通用插入排序 – Thanga

回答

1

这应该给你你想要的输出。你的代码有很多问题。您正在跳过阵列中的元素,并使用i < array.size() - 1循环定义。

String[] inputArray = {"Juan", "Jhon", "Camil", "William", "Andrew", "Felip"}; 
for(int i = 1; i < inputArray.length; i++) { 
    String key = inputArray[i]; 
    int j = i - 1; 

    while (j >= 0 && key.compareTo(inputArray[j]) < 0) { 
     inputArray[j + 1] = inputArray[j]; 
     j--; 
    } 
    inputArray[j + 1] = key; 
} 
System.out.println(Arrays.toString(inputArray)); 
+0

谢谢,就是这样 – ravelinx

1

尝试将环路条件更改为:i < array.size()而不是i < array.size()-1

使用i < array.size()-1是有道理的,当你在ii+1访问元素,但你似乎在ii - 1访问的元素。

+0

我将size() - 1更改为size(),我得到的输出是Felip Andrew Camil Jhon Juan William。所以Felip仍然不合适,我不知道为什么。 – ravelinx