2017-11-17 11 views
-2

SongLineオブジェクトの配列をlineNumber(配列内の各要素は、独自のlineNumberフィールドを持つSongLineオブジェクト)という観点から昇順にソートする必要があります。整数フィールドによるオブジェクト配列の並べ替え

public static void sortByLineNumber(SongLine[] songs) { 
    for(int i = 0; i < songs.length - 1; i++) { 
     if((songs[i].getLineNumber()) > (songs[i+1].getLineNumber())) { 
      SongLine[] temp = new SongLine[1]; 
      temp[0] = songs[i]; 
      songs[i] = songs[i + 1]; 
      songs[i + 1] = temp[0]; 
     } 
    } 
} 

SongLineクラスには、lineNumberを個別に取得して設定するメソッドがあります。 私はこのメソッドを呼び出すとき、なぜそれが配列の要素をソートしないのですか?

+1

は、なぜあなたはJavaは組み込みのソート方法を持っている独自の並べ替えを書いていますか?あなたが課題の一部としてそれを書く必要があると仮定して、ソートアルゴリズムを研究しましたか?あなたは授業でソートアルゴリズムをカバーしましたか?実際にソートされたアルゴリズムは何ですか? –

+0

カスタムコンパイラ –

答えて

0

要素を1回切り替えた後、要素を切り替えた後にリスト全体を繰り返すことはないため、ifの中にi = 0の値を設定して、スワップが行われるたびにアルゴリズムを先頭から検索させます、これはブルートフォースでSongLineオブジェクトのリストをソートします。

サイドノート:要素を交換するためにSongLine objを使用してください。配列内の単一のオブジェクトを交換するときは、SongLine配列を作成する意味がありません。

public static void sortByLineNumber(SongLine[] songs) { 
    for(int i = 0; i < songs.length - 1; i++) 
    { 
     if(songs[i].getLineNumber() > songs[i+1].getLineNumber()) 
     { 
      SongLine temp = songs[i]; 
      songs[i] = songs[i + 1]; 
      songs[i + 1] = temp; 
      i = 0; //force it to start from the beginning 
     } 
    } 
} 

別のアプローチは、SongLineコンパレータクラスを作成することへのだろうと、あなたは、ブルートフォースソートよりも高速になりSongLineオブジェクトのコレクションにCollections.sort()メソッドを呼び出すことができます。あなたが行う必要があるのは、比較器の比較メソッドのロジックとして現在のifロジックを使用することだけです。

Check out this example

+0

0より前に1を注文してから、すべての行番号に対して2を正しく並べ替えることを除いて、これはほとんど機能します。 –

+0

どのケースで0より前に注文される可能性があるかわからない... –

関連する問題