0

これが答えられた後、私はコードを通して自分の道を歩み続けました。このように完璧に機能します:

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 がありません。私が望むのは、ソートされた降順または昇順の配列を追加で返すことです (asc == 1 (asc)、または asc == 0 (desc) によって異なります)。

この中に実装する方法がわかりません。つまり、現在は昇順または降順で並べ替えることができますが、このメソッドがいくつかの厄介な長い for() および if() ループで呼び出された後。

内部にコンパクトに入れたいのですが、bubblesort(x,0,0) または (x,0,1) を与えるかどうかに応じて、リストを降順または昇順で返す必要があります。

4

5 に答える 5

2

簡単な解決策:または のいずれかascにできます1-1?

次に、1 行を変更するだけで済みます。

if(asc * customerdata[i][sortafter].compareTo(customerdata[i+1][sortafter]) < 0)
于 2009-12-06T18:41:11.737 に答える
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){

並べ替えの順序を反転したい場合。

于 2009-12-06T18:34:26.823 に答える
1

これを試して:

 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 ステートメントを交換し、別の if を追加しません ;^)

(「+ asc」と「- asc」の 2 つの位置を変更したことに注意してください)

編集: Asc が実際に 0 または 1 以外にならないように、最初の行に大きな assert を置くことを忘れないでください ;^)

于 2009-12-06T18:35:15.480 に答える
1

また、上記の簡単なハックの回答ではなく、「ソフトウェア エンジニアリング」タイプの回答が必要な場合は、ファンクタ (Comparator クラスの検索) を渡して比較を行い、最終的に柔軟な検索を可能にすることができます。

于 2009-12-06T18:36:18.753 に答える
1

いつでも昇順で並べ替えることができ、降順が必要な場合は単純に逆にすることができます。ループ内で「if」テストを繰り返すと、配列をもう一度トラバーサルするよりも効率が悪いかどうかが問題です。

配列のサイズは比較的小さいと想定しています。バブル ソートは非常に効率が悪いため、小さな配列以外では使用しないでください。

于 2009-12-06T18:34:15.047 に答える