2014-04-04 64 views
1

對不起,這是一種跛腳。我在這裏查看了一種Bubble排序的方法,以便我可以從最大的數字到最小的數組。我在當前的迭代中發現了一些錯誤,我似乎無法讓數組進行排序,只是將較小的數字與較大的數字進行比較。在這裏,我到目前爲止使用。你怎麼泡最大的排序到最小

//bubble sort 
    for(int i=0;i<size;i++) 
    { 
     for(int v=1;i<(size-i);i++) 
     { 
      if(arrInt[v-1]<arrInt[v]) 
      { 
       temp = arrInt[v-1]; 
       arrInt[v-1]=arrInt[v]; 
       arrInt[v]=temp; 
      } 
     } 
    } 
+4

在第二個'for'中,你爲什麼使用'i'? –

+0

哦,廢話,謝謝老鷹眼睛的人! –

+0

不應該你的2nd for循環是for(int v = 1; v <(size-i); v ++)? – suprasad

回答

1
int n = arrInt.length; 
int temp = 0;  
for (int i = 0; i < n; i++) { 
    for (int v = 1; v < (n - i); v++) { 
     if (arrInt[v - 1] < arrInt[v]) { 
      temp = arrInt[v - 1]; 
      arrInt[v - 1] = arrInt[v]; 
      arrInt[v] = temp; 
     } 

    } 
} 

試試這個。 更新 - 用v代替j

+1

對於從最大到最小(如每個問題),第3行應該是'if(arrInt [j - 1] ' – KNU

+0

已編輯謝謝。 – ambarox

+0

幾乎完全是我發佈的,但用j替換v我甚至切換了第3行,我仍然有問題。 –

0

問題是內循環應該從1到n。相反,你的內循環會提前停止。

而且你正在測試i的內循環條件,但你應該測試v

嘗試此:

//bubble sort 
for(int i=0;i<size;i++) 
{ 
    for(int v=1;v<size;v++) 
    { 
     if(arrInt[v-1]<arrInt[v]) 
     { 
      temp = arrInt[v-1]; 
      arrInt[v-1]=arrInt[v]; 
      arrInt[v]=temp; 
     } 
    } 
} 
0

Bubble Sort Method for Descending Order

public static void BubbleSort(int[ ] arr){ 
    int records=arr.length-1; 
    boolean notSorted= true; // first pass 
    while (notSorted) { 
     notSorted= false; //set flag to false awaiting a possible swap 
     for(int count=0; count < records; count++) { 
      if (arr[count] < arr[count+1]) { // change to > for ascending sort 
       arr[count]=arr[count]+arr[count+1]; 
       arr[count+1]=arr[count]-arr[count+1]; 
       arr[count]=arr[count]-arr[count+1]; 
       notSorted= true;  //Need to further check   
      } 
     } 
    } 
} 

在該方法中,當陣列是排序然後它不檢查進一步。

0

通常我實現冒泡排序是這樣,

for(int i=0;i<size-1;i++) { 
    for(int v=0;v<(size-1-i);v++){ 
     if(arrInt[v]<arrInt[v+1]) 
     { 
      temp = arrInt[v]; 
      arrInt[v]=arrInt[v+1]; 
      arrInt[v+1]=temp; 
     } 
    } 
} 

您知道是什麼問題,在你的代碼???看看內部循環,你正在初始化v,但檢查和更改i。必須是一個複製粘貼錯誤..:P

希望它幫助...

0

在這裏你去:

int x = 0; 

for(int i = 0; i < array.length; i++) 
    for(int j = 0; j < array.length; j++) 
     if(array[i] > array[j + 1]) 
      x = array[j + 1]; 
      array[j + 1]= array[i]; 
      array[i] = x; 

x這裏是一個臨時變量,你只需要進行此項操作。

0

這是一個完整的運行程序給你。希望能讓你有動力

package test; 

public class BubbleSort { 

private static int[] arr = new int[] { 1, 45, 65, 89, -98, 2, 75 }; 

public static void sortBubbleWay() { 
    int size = arr.length-1; 
    int temp = 0; // helps while swapping 
    for (int i = 0; i < size - 1; i++) { 
     for (int j = 0; j < size - i; j++) { 
      if (arr[j] < arr[j+1]) { /* For decreasing order use < */ 
       temp = arr[j]; 
       arr[j] = arr[j + 1]; 
       arr[j + 1] = temp; 
      } 
     } 
    } 
} 

private static void showShortedArray() { 
    for (int elt : arr) { 
     System.out.println(elt); 
    } 
} 

public static void main(String args[]) { 
    sortBubbleWay(); 
    showShortedArray(); 
} 
}//end of class