0

これが機能しない理由がわかりません。

public class InsertionSort {

    public static void main(String[] args) {

        int x[] = { 9, 5, 8, 4, 3, 0, 6, 7, 2, 1 };
        int[] result = InsertionSortMethod(x);

        for (int z = 0; z < x.length; z++) {
            System.out.print(x[z] + " ");
        }
    }

    public static int[] InsertionSortMethod(int x[]){
        for (int a = 0; a < x.length; a++) {
            int divider = a;
            if(divider > 0 & divider < x.length){
                if(x[divider] < x[0]){
                    int temp = x[divider];
                    for(int c = divider; c > 0; c--){
                        x[c] = x[c-1];
                    }
                    x[0] = temp;
                }
                if(x[divider] > x[divider-1]){
                    x[divider] = x[divider];
                }
                else{
                    for(int b = divider-1; b > 0; b--){
                        if(x[divider] < x[b]){
                            int temp = x[divider];
                            x[divider] = x[b];
                            x[b] = temp;
                        }
                    }
                }
            }
        }
        return x;
    }

}
4

2 に答える 2

0

あなたは自分でやりたいと言うので、これだけです:

for(int b = divider-1; b > 0; b--){
    if(x[divider] < x[b]){
        int temp = x[divider];
        x[divider] = x[b];
        x[b] = temp;
    }
}

よりも小さいインデックスを持つ配列の部分dividerが既にソートされていて、たとえば と の間にある場合 (たとえば3x[divider]よりも大きい場合)、そのループ内の and はすぐに position にスワップされます。しかし、index の値がforよりも大きくなり、それ以上のスワップは行われません。これに対処する 1 つの考えられる方法は、スワップのたびに.x[0]x[1]dividerx[divider] < x[divider-1]divider-1dividerx[b]0 <= b <= divider-2dividerdivider = b;if

于 2012-11-07T03:21:50.950 に答える
0

以下は単純な挿入ソート関数です。

void insertionSort(int[] arr) {

      int i, j, newValue;

      for (i = 1; i < arr.length; i++) {

            newValue = arr[i];

            j = i;

            while (j > 0 && arr[j - 1] > newValue) {

                  arr[j] = arr[j - 1];

                  j--;

            }

            arr[j] = newValue;

      }

}
于 2012-11-07T03:18:20.933 に答える