質問

こんにちは、私は1dimensionalアレイの簡単なバブルソートを実装する方法を知っています。私は私の問題を抱えてどこでも2dimensionalまたは多次元で、それはです。

これまでのところ私は、1Dimensional配列をソートするために、これを使用してきた魔法のように動作します。しかし、大部分は整数ではなく文字列ます:

boolean sort;

do{
    sort = true;

    for (int i = 0; i < testarray.length - 1; i++){
        if(testarray[i] > testarray[i+1]){
            temp = testarray[i];
            testarray[i] = testarray[i+1];
            testarray[i+1] = temp;           
            sort = false;
        }
    }

}while(!sort);

    // Descending Output
    // for (int k = testarray.length - 1; k >= 0 ; k--){

    // Ascending Output
    for (int k = 0; k < testarray.length ; k++){
        System.out.print(testarray[k] + ", ");
    }

私が持っていると仮定します:

CUSTOMERNUMBER、名前、姓、住所

String customers[][] = {{"123", "John", "Doe", "Somewhere"}, {"007", "James", "Bond", "MI5"}, {"1337", "Lolcat", "Izgud", "Saturn"}}
CUSTOMERNUMBER、名前、姓またはアドレス:

さて、私は後にソートするために何をソートするために選びたいです。その後、私は私が欲しいものによっては、出力のIT昇順または降順にしたい。

私はちょうどバブルソートでこれを実装する方法は考えています。私はバブルソートは、このような状況でどのように機能するかを学びたい、バブルソート、なし他のソートアルゴリズムに滞在したい。

昇順と私の考えを下降するためには、次のようになります。私は、もしループを行うことができます。例if (asc == 1) then output ascending, else output descendingため。 ASCは、例えばコンソール経由で求められることでしょう。

すべてのヘルプははるかに高く評価されます。

役に立ちましたか?

解決

2次元配列は、基本的にアレイからなるわずか1次元配列である。

ただ、内側の配列を移動し、intの代わりにのみ、あなたが持っている同じコードを使用します。

つのアレイは、次のより「大きい」であるかどうかを知るために、(..ので、名前又は名字)正しい配列メンバの文字列値を比較します。これを行うには、文字列compareToメソッドを使用することができます。

最終ノート:内部の配列は、実際に情報を含むオブジェクトであれば、あなたが与えた例が優れています。この方法であなたはすべてのフィールドの代わりに、すべて彼らに文字列を作るための別のデータ型を持つことができます。

例えば:ます。

  class Person
  {
       int customerNumber;
       String name;
       String surName;
       String address;
  };

編集:実際には、あなたの質問に答えるために:

以下のようにプログラムを変更します:

一時宣言を変更します:

 String [] temp;

と行を変更します:

 if(testarray[i] > testarray[i+1])

に:

 if(testarray[i][1] > testarray[i+1][1])

それが動作し、名前をソートでしょ」より

R

他のヒント

(:それは文字列の配列者注)

2次元配列では、intまたはIntegerからご含まれるオブジェクトの変更の種類はString[]します。これは、あなたがtempの種類を変更する必要がありますものです。

最大の変化は、あなたの比較になります。あなただけの<を使用して、2つの文字列配列を比較することはできません - しかし、あなたはすでにこれを知っていました。何をする必要が自分自身に2つのString[]の引数を取り、最初は二より小さい/等しい/大きいか否かに応じて、負、0または正の数を返すメソッドを構築しています。次に、あなたのソート順を確立するために、そのメソッドから結果に< / >の比較を行うことができます。

あなたはいくつかの異なるソート基準を使用することができるようにしたい場合は、

、あなたはどのように動作するように伝えるために別のパラメータを渡して(例えば)での比較機能をより多目的にする必要がありますか、あなたは、いくつかの異なるが必要です比較関数、およびソート時に使用するかを決定するifまたはswitchを使用します。

手動で2つの文字列の配列を比較するように、基本的な方法がある:String.compareTo()を用いて第1のキーストリングを比較します。結果が0でない場合は、次の点を返します。それが0であれば、最初のキーが同じであり、あなたは次のキーを比較する必要があります。あなたは鍵が不足し、0に残っている場合は、あなたの2つの要素がそのキーに等しく、あなたは0を返します。

あなたは同じソートアルゴリズムを維持することができます。それはまだ2D配列を知らないだろう。次の2つの1D配列を取り、1がより大きくなると言う比較関数を考え出す必要があります。

私は、あなたが「123」、「ジョン」、「DOE」と「どこか」をまとめることにしたい推測してます。

私はあなたがオブジェクトを使用することをお勧め、と言う。

public object Person {
    private int id;
    private String name;
    private String surname;
    private String address;
}

いつものゲッターとセッターを追加します。

あなたはバブルソートアルゴリズムでそれらを並べ替え、Personオブジェクトの通常の配列を持つことができます。あなたはバブルソートALGOにID、名前、姓や住所のいずれかを比較するいくつかのカスタムコンパレータを作成することができます。

sortメソッドのシグネチャは、

のようなものでなければなりません
public Person[] bubbleSort(Person[] persons, Comparator comp)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top