2017-05-04 10 views
0

私の実装では、J <のn-2またはのn-1またはNの場合には動作しません。私は間違って何をしていますか?私の選択ソートには何が問題なのですか?選択ソートの

コントロールループの監視を可能にするオンラインIDEはありますか?

#include <stdio.h> 
#define n 4 
int main(void) { 
    int a[n]={4,3,2,1}; 
    int j,min; 
    for(int i=0;i<n;i++){ 
     min=i; 
     for(j=i+1;j<n-3;j++) 
      if(a[j]>a[j+1]) 
       min=j+1; 
     if(min!=i){ 
      int t=a[min]; 
      a[min]=a[i]; 
      a[i]=a[t]; 
     } 
    } 

    for(int i=0;i<n;i++) 
     printf("%d",a[i]); 
    return 0; 
} 

I tried it here

+0

質問に言語(つまり、「c」)を付けることができますか? – trincot

答えて

0

あなたのコードは確かにn-3の奇妙な制限がありますが、それはまた、いくつかの他の欠点があります:あなたは、現在の最小値(a[min])と比較すべき最小を見つけるには

  • を、配列内の次の/前の要素ではない
  • スワップするコードが正しくありません。最後の割り当てはa[t]ではなく、tそれ自体。ここで

修正されたコードです:

int main(void) { 
    int a[n]={4,3,2,1}; 
    int j,min; 
    for(int i=0;i<n;i++){ 
     min=i; 
     for(j=i+1;j<n;j++) 
      if(a[min]>a[j]) 
       min=j; 
     if(min!=i){ 
      int t=a[min]; 
      a[min]=a[i]; 
      a[i]=t; 
     } 
    } 

    for(int i=0;i<n;i++) 
     printf("%d",a[i]); 
    return 0; 
} 

https://ideone.com/AGJDPS

はNB:なぜループ内 printfの呼び出しを追加しないで、オンラインIDEで中間結果を表示するには?もちろん、大規模なコードプロジェクトでは、すべてのデバッグ機能を備えたローカルにインストールされたIDEを使用し、コードをステップ実行することをお勧めします。

+0

私の質問は、本当にN-3が必要な理由です。どういう意味ですか? –

+0

これは必要ありません。違います。 – trincot

+0

次に正しい解決策は何ですか? –