0

このパーティショニング コードの正確な問題点を突き止めるには、助けが必要です。私は数日間苦労していますが、頭を抱えているようには見えません。

pIdx はピボット インデックス、左と右は配列の境界整数オプション、配列 a は単なる配列または格納された long 値です。

protected static int partition(long[] a, int left, int right, int pIdx) { 
    //long numbers[] = {4,3,8,9,7,2,1,5};

    long pivot = a[pIdx];
    swap(a, pIdx, right);
    int storeIndex = left;
    for(int i=left; i<right; i++) {
        if(a[i] <= pivot)
            swap(a, i, storeIndex);

    }//for
    swap(a, right, storeIndex);
    return storeIndex;
}//partitio
4

1 に答える 1

1

コードを修正してみました。これがうまくいくかどうかを確認してください。

protected static int partition(long[] a, int left, int right, int pIdx) { 
    //long numbers[] = {4,3,8,9,7,2,1,5};
    long pivot = a[pIdx];
    swap(a, pIdx, right);
    int storeIndex = left;
    for(int i=left; i<right; i++) {
        if(a[i] < pivot) {
            swap(a, i, storeIndex);
            storeIndex = storeIndex + 1;
        }
    }
    swap(a, storeIndex, right);
    return storeIndex;
}
于 2013-09-12T20:20:49.080 に答える