将条件更改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;
}
}
}
}