2014-03-31 39 views
0

在數組中排序字符串時遇到麻煩。Bubble按字母順序從數組中排序字符串數據

我應該從我的代碼得到兩個不同的輸出,但我只得到輸出按升序。

import java.util.*; 
public class nextLineArray1 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     String names[]=new String[12]; 
     System.out.println("Enter the 12 names: "); 
     //Load Array 
     for(int i = 0; i < 12; i++) 
     { 
      names[i] = input.nextLine(); 

     } 

     //Print descending order list 
     String[] descSort; 
     descSort=bubbleSortDesc(names); 
     System.out.println("Names listed sorted in descending order (via BubbleSort): "); 
     for(int x=0; x < names.length; x++) 
     { 
      System.out.println(names[x]); 
     } 
     //Print ascending order list 
     String[] ascSort; 
     ascSort=bubbleSortAsc(names); 
     System.out.println("Names listed sorted in ascending order (via BubbleSort): "); 
     for(int z=0; z < names.length; z++) 
     { 
      System.out.println(names[z]); 
     } 
    } 
    public static String[] bubbleSortDesc(String[] names) 
    { 
     String temp; 
     int passNum, i, result; 
     for(passNum=1; passNum <= 11; passNum++) 
     { 
      for(i = 0; i<=(11-passNum); i++) 
      { 
       result=names[i].compareToIgnoreCase(names[i+1]); 
       if(result>0) 
       { 
        temp=names[i]; 
        names[i]=names[i+1]; 
        names[i+1]=temp; 
       } 
      } 
     } 
     return names; 

    } 

    public static String[] bubbleSortAsc(String[] names) 
    { 
     String temp; 
     int passNum, i, result; 
     for(passNum=1; passNum <= 11; passNum++) 
     { 
      for(i = 0; i<=(11-passNum); i++) 
      { 
       result=names[i].compareToIgnoreCase(names[i]); 
       if(result>0) 
       { 
        temp=names[i-1]; 
        names[i-1]=names[i]; 
        names[i]=temp; 
       } 
      } 
     } 
     return names; 
    } 
} 

解釋爲什麼只按升序排序會更有幫助。

在此先感謝。

+1

您的代碼'bubbleSortAsc'和'bubbleSortDesc'看起來完全相同,它不應該是。 – BevynQ

回答

1

在我看來就像bubbleSortDesc按升序排序,並BubbleSortAsc不會在所有的工作:在BubbleSortAsc

  //In BubbleSortAsc 
      result=names[i].compareToIgnoreCase(names[i]); 
      //result == 0, since names[i] is definitely equal to names[i] 
      if(result>0) 
      { 
       //Never reached 
       temp=names[i-1]; 
       names[i-1]=names[i]; 
       names[i]=temp; 
      } 

所以,你應該有,又說:

  result=names[i].compareToIgnoreCase(names[i+1]); 
      if(result>0) //names[i] > names[i+1], so swap them. 

而且在BubbleSortDesc:

  result=names[i].compareToIgnoreCase(names[i+1]); 
      if(result<0) // This was backwards. If names[i] < names[i+1], you need to swap, for descending order. 
0

其實你是真的硬

對於booble排序:

而且我猜你正在做的非常困難的,你可以對它們進行排序,並打印出來是這樣的:

... 
    for(int i = 0; i < (names.length - 1); i++){ 
     for(int j = i; j < (names.length - 1); j++){ 
      if(names[j].compareToIgnoreCase(names[i]) > 0){ 
       String aux = names[i]; 
       names[i] = names[j]; 
       names[j] = aux; 
      } 
     } 
    } 
    for(int i = 0; i < names.length; i++){ 
     System.out.println(names[i]); 
    } 
    for(int i = 0; i < (names.length - 1); i++){ 
     for(int j = i; j < (names.length - 1); j++){ 
      if(names[j].compareToIgnoreCase(names[i]) < 0){ 
       String aux = names[i]; 
       names[i] = names[j]; 
       names[j] = aux; 
      } 
     } 
    } 
    for(int i = 0; i < names.length; i++){ 
     System.out.println(names[i]); 
    } 
    ... 

希望這有助於