2016-10-26 4 views
-1

Вот мой код для проекта я работаю для класса:Как сделать сортировку в Java?

import java.lang.reflect.Array; 

public class Project10_MaryEvans { 

    public static void main(String[] args) { 

     int[] numbers = {2, 7, 5, 3, 4, 9, 8, 10, 1, 6}; 
     int i = 0; 
     final int NUMBERS_SIZE = 10; 
     System.out.print("Unsorted: "); 
     for (i = 0; i < NUMBERS_SIZE; ++i){ 
      System.out.print(numbers[i] + " ");{ 
       System.out.println(); 
      } 
      sorting(numbers, NUMBERS_SIZE); 
      System.out.print("Sorted: "); 
      for(i = 0; i < NUMBERS_SIZE; ++i){ 
       System.out.print(numbers[i] + " "); 
      } 
      System.out.println(); 
      return; 
     } 
    } 
    public static int[] shuffle(int[] numbers){ 
     for(int i = 0; i < numbers.length; ++i) { 
      numbers[i] = (int)Math.random() * numbers[i]; 
     } 
     return numbers; 
    } 
    public static void sorting(int[] numbers, int numberSize) { 
     int i = 0; 
     int j = 0; 
     int indexSmallest = 0; 
     int temp = 0; 

     for (i = 0; i < numberSize; ++i) { 
      indexSmallest = i; 
      for(j = i + 1; j < numberSize; ++j) { 
       if(numbers[j] < numbers[indexSmallest]) { 
        indexSmallest = j; 
       } 
      } 
     } 
    } 
} 

Я не получаю правильный вывод. Мой вывод:

Unsorted: 2 
Sorted: 2 7 5 3 4 9 8 10 1 6 
+0

Я бы подумал, что ваш код должен сделать 1) для контура 2) сортировочный 3) для цикла, но вы, кажется, имеют встроенные шаги 2 и 3 в ваш первый for loop –

+3

Время, чтобы научиться использовать отладчик, появляется. –

+0

Структура блока в вашем основном методе довольно перепутана. Это одна из причин, по которой вы получаете неправильный результат. Вы также «повторно используете» переменную цикла в вложенном цикле ... хотя я думаю, что вложенность на самом деле ошибочна. Подсказка: внимательно посмотрите на код ..... –

ответ

0

Я Жюст дам вам советы здесь:

  • Используйте Arrays.toString(numbers), чтобы напечатать массив легко.
  • Используйте numbers.length чтобы получить размер массива numbers.
  • (самый важный). Ваша сортировка фактически не сортирует, вы просто устанавливаете значения индексов, но вы не изменяете массив numbers (например, numbers[i] = numbers[j]).
  • Ваша первая петля (в основном) бесполезна.

И читать комментарии.

0

может быть, у вас есть сделать два цикла для вложенного в основной функции, она должна быть как

System.out.print("Unsorted: "); 
    for (i = 0; i < NUMBERS_SIZE; ++i){ 
     System.out.print(numbers[i] + " "); 
    } 
    System.out.println(); 

    sorting(numbers, NUMBERS_SIZE); 

    System.out.print("Sorted: "); 
    for(i = 0; i < NUMBERS_SIZE; ++i){ 
     System.out.print(numbers[i] + " "); 
    } 
    System.out.println(); 
    return; 
0

В вашей sorting функции вы забываете обменивать текущий элемент с минимальной Found. Вы просто вычисляете индексы.

0

Используйте этот метод для сортировки. Не требуется параметр int numberSize. Он может пройти через длину массива. Если вам нужен параметр int numberSize, замените numbers.length на numberSize.

public static void sorting(int[] numbers) { 
    int temp; 
    for (int i = 0; i < numbers.length; i++) { 
     for (int j = i + 1; j < numbers.length; j++) {     
      if (numbers[i] > numbers[j]) { 
       temp = numbers[i]; 
       numbers[i] = numbers[j]; 
       numbers[j] = temp; 
      } 
     } 
    } 
} 

Основной метод:

public static void main(String[] args) { 
    int[] numbers = {2, 7, 5, 3, 4, 9, 8, 10, 1, 6}; 
    int i = 0; 
    final int NUMBERS_SIZE = 10; 
    System.out.print("Unsorted: "); 
    for (i = 0; i < NUMBERS_SIZE; ++i){ 
     System.out.print(numbers[i] + " "); 
    } 
    System.out.println(); 
    sorting(numbers); 
    System.out.print("Sorted: "); 
    for(i = 0; i < NUMBERS_SIZE; ++i){ 
     System.out.print(numbers[i] + " "); 
    } 
}