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