2010-10-08 22 views
2

我正在尋找一個java中的bubblesort代碼,它與我在搜索互聯網時看到的常見事物相反。 我不是很瞭解下面的代碼,我所知道的是它將一堆數字從最低到最高排序。下面的代碼是否可修改,以便不輸出從最低到最高的數字。它從最高到最低輸出它?bubblesort從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; 
     } 
     } 
    } 
    } 

回答

3

變化

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

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

不會是'<='而是'<'嗎? – 2010-10-08 13:34:35

+2

如果值是= – Woot4Moo 2010-10-08 13:35:16

+0

哦,你不需要切換!對不起,:) – 2010-10-08 13:39:50

1

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

應該工作。你從數組的尾部開始往回走

+0

不應該是(i = array.length - 1; i> = 0; i--)? – 2010-10-08 13:35:13

+0

哎呀忘了第二個零指數...謝謝 – Woot4Moo 2010-10-08 13:36:49

2

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

+0

+10如果我能! – teedyay 2010-10-08 13:46:23

1

你的代碼的一些話:

如果移動交換法出你的內循環,得到它的可讀性更強,也更容易推理的獨立的部分。

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-loop,以避免逐個錯誤,並且對代碼更改更健壯 - 例如,它們也適用於列表。

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

顛倒順序。