簡體   English   中英

bubbles中從最高到最低的數字

[英]bubblesort from highest to lowest number in java

我正在尋找java中的bubblesort代碼,這與我在網上搜索時常見的東西相反。 我真的不明白下面的代碼,我所知道的是它將一堆數字從最低到最高排序。 下面的代碼是否可以修改,以便輸出從最低到最高的數字。 它輸出從最高到最低?

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;
        }
      }
    }
  }

更改

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

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

您可以更改bubblesort以滿足您的需要或保持原樣並向后移動已排序的數組。 對於兩者,你應該嘗試理解這么一小段代碼而不是簡單地要求修改代碼。

關於你的代碼的一些話:

如果將swap-method移出內循環,它會更易讀,並且更容易推理獨立部分。

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]) {

扭轉秩序。

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

應該管用。 你從數組的末尾開始然后向后移動

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM