2016-12-24 4 views
-1

So habe ich diesen Code für meine Auswahl Art:Auswahl Sortieralgorithmus Probleme

public static void selectionSort(int[] arrayToSort){ 
    int smallest; 
    for(int i = 0; i < arrayToSort.length; i++){ 
     smallest = i; 
     for(int j = i+1; j < arrayToSort.length; j++){ 
      if(arrayToSort[j] < arrayToSort[smallest]){ 
       smallest = j; 
      } 
      if(smallest != i){ 
       int temp = arrayToSort[i]; 
       arrayToSort[i] = arrayToSort[smallest]; 
       arrayToSort[smallest] = temp; 
      } 
     } 
    } 
} 

Ich bin ein int-Array mit Zufallszahlen zu erzeugen. Bei der Sortierung meiner Auswahl wird das Array manchmal sortiert, manchmal wird das Array "fast" sortiert. Das Array wird größtenteils sortiert sein, mit Ausnahme von sehr wenigen Zahlen, die an falschen Stellen sind. Ich kann nicht herausfinden, was hier schief läuft, irgendwelche Ideen?

Einige Testergebnisse, wo das Array nicht vollständig sortiert wurden:

***NON SORTED*** 
77 
53 
27 
58 
83 
***SORTED*** 
27 
53 
77 
58 
83 

und

***NON SORTED*** 
40 
87 
27 
48 
82 
***SORTED*** 
27 
40 
82 
48 
87 

Antwort

3

Sie haben einen Teil des Codes innerhalb der inneren Schleife, legte es die Schleife außerhalb;

public static void selectionSort(int[] arrayToSort){ 
    int smallest; 
    for(int i = 0; i < arrayToSort.length; i++){ 
     smallest = i; 
     for(int j = i+1; j < arrayToSort.length; j++){ 
      if(arrayToSort[j] < arrayToSort[smallest]){ 
       smallest = j; 
      } 
     } 
     if(smallest != i){ 
      int temp = arrayToSort[i]; 
      arrayToSort[i] = arrayToSort[smallest]; 
      arrayToSort[smallest] = temp; 
     } 
    } 
} 

Siehe zum Beispiel die algorithm in Wikipedia.

+0

Ohhh, ich sehe, wie das es vermasselt. Vielen Dank! – Carlton

2

Ich tat dies, wenn ich es brauche in College-Projekt!

Referenzen: selection algoritm with figure

selection sort

public static void selectionSort(int[] arr){ 
     for (int i = 0; i < arr.length - 1; i++) 
     { 
      int index = i; 
      for (int j = i + 1; j < arr.length; j++){ 
       if (arr[j] < arr[index]){ 
        index = j;//searching for lowest index 
       } 
      } 
      int smallerNumber = arr[index]; 
      arr[index] = arr[i]; 
      arr[i] = smallerNumber; 
     } 
    } 
+0

danke für die Abstimmung .. für Anfänger, es ist schwer, den Ruf zu bekommen .. Ich bin neu im Stapel Überlauf Vielen Dank! –

0

Hier innen 2. foor Schleife, wenn Sie alle Elemente finden, die kleiner als i (oder kleinste) Sie Swap-Operation tun, die hier nicht erforderlich ist. Bei der Auswahl sort müssen Sie das kleinste Element aus dem unsortierten Array abrufen und mit dem Element ganz links austauschen, und dieses Element wird zu einem Teil des sortierten Arrays. Halten Sie den Tausch nur außerhalb der 2. inneren Schleife, so dass er nur für das kleinste Element vertauscht wird.

for(int i = 0; i < arrayToSort.length; i++){ 
    smallest = i; 
    for(int j = i+1; j < arrayToSort.length; j++){ 
     if(arrayToSort[j] < arrayToSort[smallest]){ 
      smallest = j; 
     } 
    } 
    if(smallest != i){ 
     int temp = arrayToSort[i]; 
     arrayToSort[i] = arrayToSort[smallest]; 
     arrayToSort[smallest] = temp; 
    } 
}