2013-05-09 2 views
0

Я пытаюсь сортировать массив чисел, используя Selectionsort и generics, и я чувствую себя потерянным. У меня есть интерфейс с public T [] sort и public void swap. Что мне нужно исправить, чтобы вернуть отсортированный массив целых чисел?Проверка моей функции сортировки

Мой код:

package sorting; 

import java.lang.reflect.Array; 

public class Selectionsort<T extends Comparable<T>> implements 
    ISelectionsort<T> { 

private T[] array; 

@Override 
public T[] sort(T[] array) { 
    for (int i = 0; i < array.length; i++) { 
     int k = i; 
     for (int j = 0; j < array.length; j++) { 
      if ((array[j].compareTo(array[k]) == -1)) 
       k = j; 
     } 
     if (k != i) 
      swap(array, i, k); 
    } 

    return null; 
} 

@Override 
public void swap(T[] array, int i, int j) { 
    T tmp = array[i]; 
    array[i] = array[j]; 
    array[j] = tmp; 

} 

public static void main(String[] args) { 
    Selectionsort<Integer> ss = new Selectionsort<Integer>(); 
    Integer[] array = { 4, 2, 9, 8 }; 

    System.out.println(ss.sort(array)); 
} 
} 
+0

Вам не нужно ничего возвращать, вы меняете элементы в исходном массиве, поэтому исходный массив сортируется, когда Selectionsort # sort завершает – hoaz

+1

Почему ваш 'sort' возвращает' null', а не отсортированный массив? Почему он должен что-то возвращать, когда он фактически сортирует массив на месте? – 9000

+0

Переменные - это указатели на часть памяти. Если вы используете свой метод, вы уже сортируете содержимое своей переменной. Ваш 'System.out' будет печатать 'null' в вашей консоли, потому что все, что вы делаете в своем методе, - это изменение позиции значений переменных. Вам придется пройти через ваш массив и извлечь свои значения 1 на 1 с помощью цикла 'for'. – DaGLiMiOuX

ответ

2

начало j от k:

for (int j = k; j < array.length; j++) { 

возвращение того же arary:

return array; 

и печати, как:

ss.sort(array); 
    for (int i = 0; i < array.length; i++) { 
     System.out.println(array[i]); 
    } 
Смежные вопросы