2016-05-12 5 views
0
public class MyBubbleSort { 

public static void bubbleSort(int[] a, int n) { 

    int i, j, temp; 

    for (i = 0; i <= (n-2); i++) { 
     for (j = i + 1; j <= (n-1); j++) { 
      if (a[j] < a[i]) { 
       temp = a[i]; 
       a[i] = a[j]; 
       a[j] = temp; 
      } 
     } 
    } 
} 
} 

Это дает мне отсортированный массив, когда я отлаживаю, но я просто хотел быть на 100% уверенным.Является ли моя реализация сортировки пузырьков правильной?

+1

Возможная дубликата [этот код правильный реализации Bubble Sort?] (Http://stackoverflow.com/questions/5619722/is-this-code-a-correct-implementation-of-bubble-sort) –

+0

Параметр 'n' нечетный. Это было дано? – zapl

+0

Вы полагаете, что это не нужно? – jtetra13

ответ

0

Вы могли бы привести в порядок Кодекса немного:

  1. Сделать простираться интерфейсную Сортировать с одним методом sort(int[] a, int n).
  2. Метод MyBubbleSort должен реализовывать упомянутый интерфейс, а не быть статическим.

  3. int i и j должно быть указано в соответствующей декларации for.

  4. temp должно быть указано внутри внутреннего if.
  5. Несомненно, если вам нужно передать длину массива, поскольку это свойство в массиве Java. Единственное время, чтобы передать длину, было бы, если вы намеревались сортировать вспомогательные массивы.
+0

Когда я запускал метод Main в режиме отладки, он дал мне отсортированный массив, но я просто хотел убедиться, что он отсортирован по форме пузыря, а не по-другому. – jtetra13

0

Вы делаете правильный выбор пузырьков! В вашем выражении «if» вы правильно меняете два смежных значения, если они не отсортированы правильно. И это принцип сортировки пузырьков: вы повторяете этот процесс, пока ваш массив не будет правильно отсортирован. https://www.youtube.com/watch?v=lyZQPjUT5B4

Однако вы делаете странные вещи в своем коде! Как сказал zapl в комментариях, вам не нужен этот параметр «n», так как вы можете просто получить размер массива в вашем методе.

Также предпочитают использовать «< длину», «< длина - 1» вместо вашего < = которые, если вы считаете, хорошо, более интуитивный

public static void bubbleSort(int[] tab) { 
     int n = tab.length ; 
     for (int i = 0; i < n-1; i++) { 
      for (int j = i + 1; j < n ; j++) { 
       if (tab[j] < tab[i]) { 
        int temp = tab[i]; 
        tab[i] = tab[j]; 
        tab[j] = temp; 
       } 
      } 
     } 
    }