Frage von Alinchen24, 17

was mache ich falsch (selection sort) in C?

Mein code:

include

include

void s( int anzahl, int array[]) {

//min finden

int i;

int min=array[0];

for(i=1; i<anzahl; i++) {

if(array[i] < min) {

min = array[i];

}

}

//tauschen

while (array[i]!=min){

array[i]=array[i+1];

}

array[0]=min;

printf("%i", min);

}

int main(){

int array[]={7,2,4,5,3};

int N=sizeof(array)/sizeof(int);

int i;

for(i=0;i<N;i++){

printf("%i", array[i]); }

for(i=0;i<N;i++){

s(N,array);

}

printf("Sortiert");

for(i=0;i<N;i++){

printf("%i", array[i]);

}

return 0;

}

vielen Dank im Vorraus :)

Expertenantwort
von regex9, Community-Experte für Programmierung, 7
  1. Wieso benötigst du 2 Includes? stdio.h für printf sollte reichen.
  2. Halte dich an Konventionen (Variablennamen beginnen mit einem Kleinbuchstaben), gebe deinen Funktionen anständige Namen (nicht s)
  3. Warum führst du die Sortierung mit einer Schleife mehrmals aus? Der Wert von N ändert sich doch nicht einmal.
  4. Auch beim Tauschen frage ich mich, wozu du dafür eine while-Schleife benötigst. Die Werte wirklich tauschen tust du eh nicht.
  5. Selection sort:

void sort(int list[], int count) {

       int i, min;

      for(i = 0; count - 1 > i; ++i) {

           min = i;

           int j, int swap = 0;

           for(j = 1 + i; count > j; ++j) {

                if(list[j] < list[min] {

                    min = j;

                    swap = 1;

              }              

          } 

          if(0 == swap) {

             continue;

         }

         int temp = list[min];

         list[min] = list[i];

         list[i] = temp; 

      }

}

Keine passende Antwort gefunden?

Fragen Sie die Community