Несколько слов о вашем коде:
Если вы удалите метод swap из вашего внутреннего цикла, он станет более читабельным и станет легче рассуждать о независимых частях.
public void swap (int i, int j, int [] arr) {
int tmp = arr [i];
arr [i] = arr [j];
arr [j] = tmp;
}
Сладкие маленькие методы легко понять и проверить, что важно.
Не объявляйте индексные переменные вне for. Это усложняет анализ вашего кода - переменные видны без необходимости вне цикла. В старом коде вы ничего не получаете от объявления tmp вне внутреннего цикла. Декларация бесплатна во время выполнения.
public static void bubbleSort (int a[], int n) {
for (int i = 0; i < n; i++) {
for (int j = 1; j < (n-i); j++) {
if (a[j-1] > a[j]) {
swap (j, j-1, a);
}
}
}
}
// ... missing ...
Не повторяйся. Переместить дублированный код в метод.
public static void show (int [] arr)
{
for (int i : arr)
System.out.print (i + " ");
System.out.println ();
}
Сладкие маленькие методы легко проверить. По возможности используйте упрощенный цикл for, чтобы избежать ошибок, связанных с ошибками, и быть более устойчивыми к изменениям кода - они также работают, например, для списков.
int array[] = {12, 9, 4, 99, 120, 1, 3, 10};
System.out.println ("Values Before the sort:\n");
show (array);
bubbleSort (array, array.length);
System.out.print ("Values after the sort:\n");
show (array);
System.out.println ("PAUSE");
}
С помощью упрощенного кода становится легче рассуждать о том, что делает эта часть.
if (a[j-1] > a[j]) {
нужно просто изменить
if (a[j-1] < a[j]) {
чтобы отменить заказ.