2D配列とバブルソート
-
13-09-2019 - |
質問
こんにちは、私は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)