пузырьковая сортировка от самого высокого до самого низкого числа в Java - PullRequest
2 голосов
/ 08 октября 2010

Я ищу код сортировки пузырьков в Java, который отличается от обычной вещи, которую я вижу при поиске в Интернете. Я не совсем понимаю код ниже, все, что я знаю, это то, что он сортирует кучу чисел по убыванию. Изменяется ли код ниже так, чтобы вместо вывода чисел от самого низкого до самого высокого. Это выводит это как самый высокий к низшему?

int i;
    int array[] = {12,9,4,99,120,1,3,10};
    System.out.println("Values Before the sort:\n");
    for(i = 0; i < array.length; i++)
      System.out.print( array[i]+"  ");
    System.out.println();
    bubble_srt(array, array.length);
    System.out.print("Values after the sort:\n");
    for(i = 0; i <array.length; i++)
      System.out.print(array[i]+"  ");
    System.out.println();
    System.out.println("PAUSE");
  }

  public static void bubble_srt( int a[], int n ){
    int i, j,t=0;
    for(i = 0; i < n; i++){
      for(j = 1; j < (n-i); j++){
        if(a[j-1] > a[j]){
          t = a[j-1];
          a[j-1]=a[j];
          a[j]=t;
        }
      }
    }
  }

Ответы [ 4 ]

3 голосов
/ 08 октября 2010

изменение

if(a[j-1] > a[j]){

до

if(a[j-1] < a[j]){
2 голосов
/ 08 октября 2010

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

1 голос
/ 12 января 2012

Несколько слов о вашем коде:

Если вы удалите метод 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]) {

чтобы отменить заказ.

1 голос
/ 08 октября 2010

for(i = array.length -1; i >=0; i--)<br> {<br> System.out.println(array[i]);<br> }

Должно работать.Вы начинаете с конца массива и идете назад

...