2016-04-05 11 views
1

マージソートをコンパイルすると、罰金がコンパイルされますが、出力はありません。マージソートを修正するには?

これは再帰的に行う必要があります。また、メインでprintList()関数を実行するので、リストを印刷するのを忘れているわけではありません。私は過去30分間、これを見つめていました。

public void printList(){ 
    for(int i = 0; i < fullNames.size(); i++){ 
     System.out.println(fullNames.get(i)); 
    } 
} 

public void sort(){ 
    fullNames = mergeSort(fullNames); 
} 

public ArrayList<String> extract(ArrayList<String> ex, int low, int high){ 
    ArrayList<String> answer = new ArrayList<String>(); 
    for(int i = low; i <= high; i++){ 
     answer.add(ex.get(i)); 
    } 

    return answer; 
} 

public ArrayList<String> merge(ArrayList<String> first, ArrayList<String> second){ 
    int f = 0; 
    int s = 0; 
    ArrayList<String> answer = new ArrayList<String>(); 
    while(first.size() > 0 || second.size() > 0){ 
     if(s != second.size() && f != first.size()){ 
      if(first.get(f).compareTo(second.get(s)) > 0){ 
       answer.add(second.get(s)); 
       s++; 
      } 

      else if(first.get(f).compareTo(second.get(s)) < 0){ 
       answer.add(first.get(f)); 
       f++; 
      } 
     } 

     else if(f == first.size()){ 
      while(s != second.size()){ 
       answer.add(second.get(s)); 
       s++; 
      } 
     } 

     else{ 
      while(f != first.size()){ 
       answer.add(first.get(f)); 
       f++; 
      } 
     } 
    } 

    return answer; 
} 
public ArrayList<String> mergeSort(ArrayList<String> names){ 
    int k = names.size()-1; 

    if(k > 1){ 
     ArrayList<String> first = extract(names, 0, k/2); 
     ArrayList<String> second = extract(names, (k/2) + 1, k); 

     mergeSort(first); 
     mergeSort(second); 

     return merge(first, second); 
    } 

    else{ 
     return names; 
    } 
} 
+1

あなたはIDEでそれをステップ実行しようとしたことがありますか? – robotlos

+0

fullNamesはインスタンス変数ですか?私はそれがどこから来ているのかを理解することができません。私はあなたのコードをテキストエディタにコピーしました。それが私が初期化していなかった唯一のものです。 –

+1

マージメソッドをチェックしてください。ループ中に邪魔になっている。 –

答えて

1

第一及び第二の大きさは、ループ内で調整されることはありませんので、あなたのマージでwhile条件が偽になることはありません:

while(first.size() > 0 || second.size() > 0){ 
     if(s != second.size() && f != first.size()){ 
      if(first.get(f).compareTo(second.get(s)) > 0){ 
       answer.add(second.get(s)); 
       s++; 
      } 

      else if(first.get(f).compareTo(second.get(s)) < 0){ 
       answer.add(first.get(f)); 
       f++; 
      } 
     } 

     else if(f == first.size()){ 
      while(s != second.size()){ 
       answer.add(second.get(s)); 
       s++; 
      } 
     } 

     else{ 
      while(f != first.size()){ 
       answer.add(first.get(f)); 
       f++; 
      } 
     } 
    } 
関連する問題