2017-01-22 1 views
1

Ich bin Selection Sort-Algorithmus in Java mit ArrayList implementieren. Algorithmus ich implementiert ist korrekt, aber ich bekomme keine gültige Ausgabe. kann mir bitte jemand helfen wenn ich mit dieser Arraylist falsch liege. Code:So lösen Sie diese Auswahl in ArrayList sortieren

import java.util.*; 
public class SelectionSort { 
public static void main(String[] args) { 
    ArrayList <Integer> array = new ArrayList<Integer>(); 
    array.add(50); 
    array.add(30); 
    array.add(10); 
    array.add(60); 
    array.add(40); 
    System.out.println(array); 
    selsort(array); 

} 
private static ArrayList<Integer> selsort(ArrayList<Integer> array){ 
    int i = 0; 
    int imin = 0; 
    int len = array.size(); 
    for (i = 0;i <len-1; i++){ 
     imin = i; 
     for (int j = i+1; j<len; j++) { 
      if ((Integer) (array.get(j)) < (Integer) (array.get(imin))){ 
        imin = j; 
      } 
      Collections.swap(array,i,j); 
     } 
    } 
    System.out.println(array); 
    return array; 

} 
} 

output:

[50, 30, 10, 60, 40] // vor
[40, 60, 10, 30, 50] // nach

Antwort

2

Sie tauschen die Elemente mit den falschen Indizes an der falschen Stelle aus.
Der korrekte Austausch ist i mit imin.
die richtige Stelle ist, die außerhalb der inneren Schleife:

private static ArrayList<Integer> selsort(ArrayList<Integer> array){ 
    int i = 0; 
    int len = array.size(); 
    for (i = 0; i < len - 1; i++) { 
     int imin = i; 
     for (int j = i + 1; j < len; j++) { 
      if (array.get(j) < array.get(imin)) { 
       imin = j; 
      } 
     } 
     Collections.swap(array,i,imin);  
    } 
    System.out.println(array); 
    return array; 
} 

[50, 30, 10, 60, 40]
[10, 30, 40, 50, 60]

+0

oops ..thanx @ luk2302 .... ohk Sie entfernt Casting auch :) – minigeek

+0

@minigeek Sie sind willkommen. Ja, ich habe das Casting entfernt, da es nicht benötigt wird, weil Sie eine generische ArrayList haben, die sicherstellt, dass, was auch immer Sie herausnehmen, eine "Integer" ist. – luk2302

+0

es zeigte mir Fehler vor..donno warum..now ist es nicht – minigeek

Verwandte Themen