2016-12-25 2 views
0

Может кто-нибудь объяснить, почему этот вид пузыря не работает в моем коде. Я бы подумал, что это легко справится. Может быть, не все правильно, но все же несколько сортировка, но вместо этого он просто возвращает тот же массив?Bubble Sort возвращает тот же массив снова?

import java.util.Random; 


public class Sorts { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     //Set array to be sorted length here! 
     int listLength = 20; 

     //Declares Array 
     int[] toBeSortedArray = new int[listLength]; 
     int[] sortedArray = new int[listLength]; 

     //fills Array with random numbers 
     for (int i = 0; i < listLength; i++) 
     { 
      Random rand = new Random(); 
      toBeSortedArray[i] = rand.nextInt(100); 
     } 


     //Passing toBeSortedArray to function 
     sortedArray = SwapSort(toBeSortedArray, listLength); 



     //Testing the filling of Array - *hint* select all comment lines and select "Toggle Block Comment" 
     for (int i = 0; i <listLength; i++) 
     { 
      System.out.print(toBeSortedArray[i] + ", "); 
     } 
     System.out.println(); 

     for (int i = 0; i <listLength; i++) 
     { 
      System.out.print(sortedArray[i] + ", "); 
     } 


    } 

    public static int[] SwapSort(int[] array, int length) 
    { 
     int temp; 
     for (int i = 0; i < length; i++) 
     { 
      for (int j = 1; j < length - 1; j++) 
      { 
       if (array[i] > array[j]) 
       {      
        temp = array[i]; 
        array[i] = array[j+1]; 
        array[j+1] = temp; 
       } 

      } 
     } 

     return array; 
    } 
} 

Выход:

55, 42, 50, 48, 9, 38, 84, 10, 81, 24, 5, 18, 32, 74, 2, 89, 15, 84, 84, 45, 
55, 42, 50, 48, 9, 38, 84, 10, 81, 24, 5, 18, 32, 74, 2, 89, 15, 84, 84, 45, 
+0

Ваш выход не то же самое, как ввод данных, а скорее наоборот: вы меняете массив, который является прошел, так что вы изменяете свой ввод. И ваш алгоритм сломан. Но если бы ваш алгоритм работал, они все равно были бы одинаковыми, но отсортированными. –

ответ

1

Ваша внутренняя петля в SwapSort должна начинаться с int j = i + 1; j < lengthi < length - 1 во внешнем контуре), подумайте о том, что происходит, когда j является 1 и i в 2 ваш алгоритм. Кроме того, ваш обмен должен происходить на элементах, которые вы по сравнению. Мол,

public static int[] SwapSort(int[] array, int length) { 
    int temp; 
    for (int i = 0; i < length - 1; i++) { 
     for (int j = i + 1; j < length; j++) { 
      if (array[i] > array[j]) { 
       temp = array[i]; 
       array[i] = array[j]; 
       array[j] = temp; 
      } 
     } 
    } 
    return array; 
} 
2

Три вещи

Первый, вы обмениваетесь неправильные элементы.

if (array[i] > array[j]) { 
    temp = array[i]; 
    array[i] = array[j]; 
    array[j] = temp; 
} 

Вы должны поменять массив элементов [I] и массив [J]

Второй

Ваш начинается внутренний цикл должен начинаться с j = i + 1 и не 1 и должны идти ДО length.

Третьего

Поскольку вы печатаете как массивы в коде после вызова функции, как даст тот же результат, так как Java передает массив по ссылке, и ваш исходный массив также модифицируется. Таким образом, даже если замена происходит в исходном коде, вы получили тот же результат

Полный код

class Sorts { 
    public static void main(String[] args) { 
     //Set array to be sorted length here! 
     int listLength = 20; 

     //Declares Array 
     int[] toBeSortedArray = new int[listLength]; 
     int[] sortedArray = new int[listLength]; 

     //fills Array with random numbers 
     for (int i = 0; i < listLength; i++) { 
      Random rand = new Random(); 
      toBeSortedArray[i] = rand.nextInt(100); 
     } 

     for (int i = 0; i < listLength; i++) { 
      System.out.print(toBeSortedArray[i] + ", "); 
     } 

     //Passing toBeSortedArray to function 
     sortedArray = SwapSort(toBeSortedArray, listLength); 
    } 

    public static int[] SwapSort(int[] array, int length) { 
     int temp; 
     for (int i = 0; i < length; i++) { 
      for (int j = 1; j < length; j++) { 
       if (array[i] > array[j]) { 
        temp = array[i]; 
        array[i] = array[j]; 
        array[j] = temp; 
       } 

      } 
     } 
     System.out.println(""); 
     for (int i = 0; i < length; i++) { 
      System.out.print(array[i] + ", "); 
     } 
     System.out.println(); 
     return array; 
    } 
} 
+0

Почему вы импортируете java.lang. Он автоматически импортируется jvm – firephil

+0

@firephil. Я использовал ideone для имитации кода. И просто скопируйте вставку решения оттуда и не сообщите об этом в библиотеках, которые я импортировал –