更改if
條件:
...
if(arr[index] < arr[index-1]){
swap(arr, index, index-1);
index = n;
}
index--;
...
的問題是,你會發現一個陣列成員後,「委託」跨陣列 - 你需要「重啓」的原因有可能是需要其他成員被「重新考慮」。 運行一個調試器,看看我的意思,如果我不清楚我的描述。
完整的解決方案:
import java.util.Arrays;
/**
* User: alfasin
* Date: 8/5/13
*/
public class BubbleSort {
public static void bubbleSort(int[] arr, int n){
int index = n-1;
System.out.println("Round number: " + n);
System.out.println(Arrays.toString(arr));
while(index>=1)
{
if(arr[index] < arr[index-1]){
swap(arr, index, index-1);
index = n;
}
index--;
}
if(n>1)
bubbleSort(arr, n-1);
}
private static void swap(int[] arr, int index, int i) {
arr[i] = arr[i]^arr[index];
arr[index] = arr[i]^arr[index];
arr[i] = arr[i]^arr[index];
}
public static void main(String...args){
int[] arr = {4,2,9,6,2,8,1};
bubbleSort(arr, arr.length);
for(int i=0; i<arr.length; i++){
System.out.print(arr[i]+" ");
}
}
}
像sjee397建議 - 這更是一個冒泡排序的 「版本」 ......
更加 「保守」 的版本冒泡排序的:
public static void bubbleSort(int[] arr, int n){
boolean swapped= true;
while (swapped){
swapped = false;
for(int i=0; i<arr.length-1; i++){
if(arr[i]>arr[i+1]){
swap(arr,i,i+1);
swapped = true;
}
}
}
}
停止工作,意思是?程序崩潰,輸出不正確的值還是拋出異常? '停止工作'是通用 – Sello
@Sello這意味着他在一個小的測試集上嘗試了它,並且它工作並且當他在一個更大/更復雜的測試集上嘗試時它沒有完成排序(輸出結果是一個未排序的數組) – alfasin