2017-03-27 12 views
0

現在、アルファベット順にアルファベット順にソートしようとしていますが、ソートする際に問題が発生します。最後の国の1つが配列の先頭に配置されていますソートを台無しにする。それ以外は動作します。配列はこれらの値= "アフガニスタン"、 "ブラジル"、 "ボスニア・ヘルツェゴビナ"、 "ザンビア"、 "トルコ"と言うことができます。はアルファベット順に配列をソートする問題を解決しました

これはソートのために私が持っているコードです:

int i; 
int j; 
String temp; 


for(i=0;i<length;i++){ 
    for(j=1;j<length;j++){ 
    if(countryList[i].compareToIgnoreCase(countryList[j])<0) 
    { 
     temp=countryList[i]; 
     countryList[i]=countryList[j]; 
     countryList[j]=temp; 
    } 
    } // 
} 
+2

'Arrays.sort(countryList、String.CASE_INSENSITIVE_ORDER)'を使用しない理由はありますか? – shmosel

+0

国をラップすると、それを比較可能にして名前だけで比較することができ、配列を使ってソートできます。ソートメソッド – Mikenno

+0

@shmosel国の配列のソート方法に応じて別の配列をソートする必要があります。 array.sortを使用してその国の人口を維持する方法はありますか? (私は国リストの並べ替えに問題があるため、コードに人口を追加しませんでした) –

答えて

1

すでに述べたように、問題は内側のforループです。 ji + 1に設定する必要があります。

もう1つ問題があります。比較が間違っています。これは、アルファベットの昇順にソートします:挿入ソートが比較的遅いため

for (i = 0; i < length; i++) { 
    for (j = i + 1; j < length; j++) { 
     if (countryList[i].compareToIgnoreCase(countryList[j]) > 0) { // >0 instead of <0 
      temp = countryList[i]; 
      countryList[i] = countryList[j]; 
      countryList[j] = temp; 
     } 
    } 
} 

しかし、私はあなたがArrays.sortを使用することをお勧めします。

+0

また、内部ループの条件に問題があります。これは 'j = i + 1'で' j Oghli

+0

申し訳ありません! 'j = i + 1'から' i Oghli

0

あなたの内側のループが後方探しています。

for(j=1;j<length;j++){ 
+0

また、j = i + 1であるため条件は 'j Oghli

+0

@MohammadOghli Uh ... no。 – shmosel

+0

申し訳ありません私は 'j = i + 1'から' i Oghli

1

i+1から1を変更における問題点は、ループ条件のために、それは次のようになります。

for(i=0;i<length-1;i++) 
    for(j=i+1;j<length;j++) 

outterループであなたがi+1インデックスと比較されますので、あなたは、配列の最後のインデックスをスキップする必要があります内部ループで。

1

バブルソートを正しく実装していません。インデックス0から一度反復しますが、要素を最初に取得するためにインデックス0からn回行う必要があることは可能です(最初の要素が実際に最後である場合)。正しい実装は次のようになります。

boolean swapped = false; 
do { 
    for each element 
     if needs to swap 
      swap 
      swapped = true 
} while (swapped); 
+0

バブルソートではありません。それは挿入の並べ替えです – Aloso

0

問題がループする第二である:

for(j=1;j<length;j++){ 

のは、我々は4回目の繰り返しなので、i = 3にしていると言うことは、聞かせて考えてみてください。 iの値にもかかわらず、jは1でjです。したがって、ji未満です。つまり、これまで正しくソートされていた結果を元に戻すことになります。次のように変更します。

for(j=i+1;j<length;j++){ 

さて、jは常にiより大きくなります。

EDIT - 実際の実装が正しいことを確認するには、@sprinterの答えを参照してください。

関連する問題