Swap innerhalb eines Arrays in C?


01.09.2020, 13:26

Hier der Code:

#include <stdio.h>

void printArray(int Z[]){

  for(int i=0; i<10; i++){

    printf("%d\n", Z[i]);

  }

}

int main()

{

  int zahlen[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  int temp;

   

  for (int i = 0; i < 5; i++){

    temp = zahlen[i];

    zahlen[i] = zahlen[9 - i];

    zahlen[9 - i] = temp;

  }

   

  printArray(zahlen);

   

  return 0;

}

 - (Computer, Programmieren, Informatik)  - (Computer, Programmieren, Informatik)

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Mach dich mal ein printArray(zahlen); ans Ende in die for-Schleife und geb dir somit nach jedem Durchlauf das Array aus.

Dann solltest du erkennen wie es funktioniert.

Danke!! Ich verstehe nicht wieso nach dem ersten Durchgang die eins am ende Steht. Der Befehl: zahlen[9 - i] = temp; weist doch dem 9. Index(10) den 1.Index(2) zu.

Demnach müsste die 2 an letzter Stelle stehen und die 1 verloren gehen.

Warum passiert das nicht?

0
@LuisBuzZ

In temp steht die Zahl die am Index i, also im ersten Durchlauf Index 0 ist.
In Temp ist also eine 1
Array: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Temp: 1

im Schritt
zahlen[i] = zahlen[9 - i]; wird dem Index 0 dann die Zahl vom Index 9 zugewiesen

Array: Array: 10, 2, 3, 4, 5, 6, 7, 8, 9, 10 Temp: 1

Im letzten Schritt wird dann der Temp dem 9. Index zugewiesen

Array: 10, 2, 3, 4, 5, 6, 7, 8, 9, 1 Temp: 1

Im nächsten Schleifendurchlauf sind es dann nicht mehr 0 und 9 sondern 1 und 8, dann 2 und 7, 3 und 6, 4 und 5

Da erkennt man dann auch nochmal warum man auch nur 5 Durchläufe braucht.

0
@LisamagPferde04

Ahh oh mein gott danke manchmal hilft es einfach ein paar stunden was anderes zu machen haha

0

Du musst nur die Hälfte tauschen, da jeweils der Anfang und das Ende des unsortierten Teils getauscht wird

Du hast nen standart Bubblesort. Google hilft dir da langfristig weiter

Woher ich das weiß:Studium / Ausbildung – Informatik Studium

Was möchtest Du wissen?