2017-05-04 2 views
0

Meine Umsetzung der Auswahl Art funktioniert nicht bei j < n-2 oder n-1 oder n. Was mache ich falsch?Was ist falsch mit meiner Auswahl sortieren?

Gibt es eine Online-IDE, mit der wir die Regelkreise beobachten können?

#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

Können Sie Ihre Frage mit der Sprache (d. H. 'C') markieren? – trincot

Antwort

0

Ihr Code hat in der Tat eine seltsame Grenze auf n-3, aber es hat auch einige andere Mängel:

  • ein Minimum finden Sie mit dem aktuellen Mindest vergleichen sollte (a[min]) , nicht das nächste/vorherige Element im Array
  • Der Code zum Tauschen ist nicht korrekt: Die letzte Zuweisung sollte nicht von a[t], sondernerfolgenselbst.

Hier ist die korrigierte Code:

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: Um Zwischenergebnisse in einer Online-IDE zu sehen, warum nicht fügen printf Anrufe innerhalb der Schleife? Für größere Code-Projekte sollten Sie natürlich eine lokal installierte IDE mit allen Debugging-Funktionen verwenden und den Code schrittweise ausführen.

+0

Meine Frage ist wirklich, warum N-3 benötigt wird? Was heißt das? –

+0

Es ist nicht erforderlich. Es ist falsch. – trincot

+0

Was ist dann die richtige Lösung? –