ソート昇順またはバブルソートの内側降順
-
13-09-2019 - |
質問
した後、これは、私はコードを私のように動作するように続けに答えました。 それはのは、この方法を完璧に動作します:
static String[][] bubbleSort(String customerdata[][], int sortafter, int asc)
{
String temp [];
boolean sort;
do{
sortiert = true;
for (int i = 0 ; i < customerdata.length - 1; i++){
if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0){
temp = customerdata[i];
customerdata[i] = customerdata[i+1];
customerdata[i+1] = temp;
sort = false;
}
}
}while(!sort);
return customerdata;
}
しかし、あなたが見ることができるように、私は、この関数内のint ASCが欠落しています。私が欲しいのはadditionalyソート降順または(ASC == 1(ASC)、またはASC == 0(DESC)天気を依存する)昇順配列を返すことです。
私はこの内、それを実装する方法を喪失でね。私は現在、私はそれが昇順または降順でソートすることができますが、この方法は、(のためのいくつかの厄介な長いと呼ばれたかつての後)と()がループしている場合を意味します。
私は、バブルソートを(X、0,0)又は(X、0,1)を与える天気をリストが降順又は昇順返されるべきであることコンパクト内部とによって有するたい。
解決
ソート上昇はi
の要素がi + 1
の要素よりも小さいことを意味します。ソート下降はi
の要素がi +
の要素よりも大きいことを意味します。トリックは、あなたが要素が場違いであるかどうかを決めるロジックを反転することです。具体的には、この行:
if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0){
に変更する必要があります。
if(customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) > 0){
あなたはソートの順序を反転するかどうます。
他のヒント
シンプルなソリューション:?あなたはasc
または1
の一つに-1
を作ることができます。
次に、あなただけの1行を変更する必要があるだろう
if(asc * customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0)
あなたは常にソート昇順と降順が必要な場合は、単にそれを逆にすることができます。これは、ループ内のテストがアレイの別のトラバーサルその効率が低い「場合、」繰り返すかどうかの問題だ。
私は、配列のサイズが比較的小さいことを仮定しています。バブルソートは、悪名高く非効率的であり、小さなアレイを除いて使用すべきではない。
この方法を試してください。
for (int i = 0 ; i < customerdata.length - 1; i++){
if(customerdata[i+asc][sortafter].compareTo(customerdata[i+1-asc][sortafter]) < 0){
temp = customerdata[i];
customerdata[i] = customerdata[i+1];
customerdata[i+1] = temp;
sort = false;
}
}
ASCが0または1(昇順または降順...)とすることができる
あなたのインデックスに追加することで、あなたは基本的にあれば別のものを追加することなく、if文を入れ替える; ^)
(私は変更2つの位置がある点に注意してください。 "+ ASC" と " - ASC")が
編集: ASCは本当に0または1よりも何かすることはできません確認して最初の行に大きなアサートを置くことを忘れないでください; ^)
そして、あなたは代わりに私が上記与えた迅速なハックの答えの「ソフトウェアエンジニアリング」タイプ回答をしたい場合、あなたは最終的に柔軟な検索を可能にするために、比較を行うために(コンパレータクラスを検索)ファンクタを渡すことができます。