InertionSort verstehen

Hallo liebes Forum, ich tue mich schwer folgenden InertionSort Code nachzuvollziehen

Java:
public static int[] intertionSort(int[] toSort){

int curr = 0;
for(curr = 0; curr < toSort.length; curr++) {
int temp = toSort[curr];
int i;
print(curr, toSort);
for(i = curr; i > 0 && toSort[i-1] < temp; i--){
toSort[i] = toSort[i-1];
}
toSort[i]=temp;
}
print(curr,toSort);
return toSort;
}

Die Aufgabe besteht darin aus dem Code die curr und die toSort auszulesen, was wäre:


Curr toSort

0 #### 2,3,8,6,7,4
1 #### 2,3,8,6,7,4
2 #### 3,2,8,6,7,4
3 #### 8,3,2,6,7,4
4 #### 8,6,3,2,7,4
5 #### 8,7,6,3,2,4
6 #### 8,7,6,4,3,2


Mein Problem ist nun, wie ich das richtig herauslesen kann.

Wäre sehr nett wenn mir das jemand mit Curr 0 und 1 mal erklären könnte
 
Du musst beachten, dass das Feld immer vor der Bearbeitung ausgegeben wird.

außerdem passiert bei curr 0 erstmal nichts, da
Java:
i = curr; i > 0
(aus 2 Schleife)
diese bedingung nicht erfüllt ist.
Daher wird bei curr 1 das gleiche Feld ausgegeben.
 
Java:
public static int[] intertionSort(int[] toSort){
 
int curr = 0;                                    
/*  curr ist 0
*/
for(curr = 0; curr < toSort.length; curr++) {      
/* for bedingung gilt, im nächsten schritt wird curr 1
*/
int temp = toSort[curr];                                
/*(das versteh ich nicht so ganz) temp wird 0? da
                                                                
/*   da curr = 0 ist?
*/
int i;                                                           
/*  int i müsste hier 0 werden
*/
print(curr, toSort);                                         
/*  hier wird nun curr = 0 ausgegeben und toSort
  2,3,8,6,7,4
*/
for(i = curr; i > 0 && toSort[i-1] < temp; i--){    
 /*  die for bedingung gilt nicht
*/
toSort[i] = toSort[i-1];
}
toSort[i]=temp;
}
print(curr,toSort);                                         
 /*  (das versteh ich auch nicht so ganz, auf welches       
   Feld hat das eine wirkung?)
*/
return toSort;                                              
 /*  (versteh ich auch nicht):S
*/
}
 
Zuletzt bearbeitet:
Java:
int temp = toSort[curr];                                
/*(das versteh ich nicht so ganz) temp wird 0? da
                                                                
/*   da curr = 0 ist?
*/
Du willst doch mit InsertionSort dein Feld sortieren.
Später(bei höherem curr) lässt du alle Feldelemente aufrutschen.
Danach wird dann der Wert von toSort[curr] an eine andere Stelle übertragen, da die Elemente aber aufgerutscht sind, hat toSort[curr]jetzt einen anderen Wert.
daher musst du den Wert von toSort[curr]irgendwo zwischenspeichern. Dies geschieht hier mit Hilfe von temp.

Java:
print(curr,toSort);                                         
 /*  (das versteh ich auch nicht so ganz, auf welches       
   Feld hat das eine wirkung?)
*/
Das gibt am Ende, wenn beide Schleifen durchlaufen wurden, dein sortiertes Feld noch einmal wieder.

Java:
return toSort;                                              
 /*  (versteh ich auch nicht):S
*/
Das sortierte Feld wird zurückgegeben. An die Stelle von wo du diese Methode (public static int[] intertionSort(int[] toSort)) aufgerufen hast.
 

Neue Themen


Zurück
Oben