0

割り当てのクイックソートを実装していて、完了しましたが、ソートされた配列が1か所で間違っています。ここに出力があります。

Array before QuickSort: 5 99 32 4 1 12 15 8 13 55
Array after QuickSort: 1 5 4 8 12 13 15 32 55 99

5と4を除くすべての配列を正しくソートします。Ivはデバッガーで何時間も遊んでいて、なぜこれが起こっているのか理解できません。誰か助けてくれませんか?Ivは私のQuickSortコードを以下に投稿しました。

int main()
{
int quickArray[SIZE] = { 5 ,99, 32, 4, 1, 12, 15 , 8, 13, 55};
int arrStartIndex = 0;
int arrEndIndex =9;

//Code to print array at start
QuickSort(quickArray,arrStartIndex,arrEndIndex);
//Code to print array after sort

return 0
}

.................................................。 ......................................。

void QuickSort(int ar2[],int startIndex, int endIndex)
{
//Begin QuickSort
int Q;
if( startIndex < endIndex )
{
    Q =  Partition(ar2,startIndex,endIndex);
    QuickSort(ar2,startIndex,Q-1);
    QuickSort(ar2,Q+1,endIndex);
}
//End QuickSort
}

.................................................。 ...........................................。

int Partition(int ar2[],int P, int R)
{
int x = ar2[R];
int i = P-1;
int temp;

for(int j = P; j <= R-1; j++)
{
    if( ar2[j] < x  )
    {
        i = i +1;
        temp = ar2[i];
        ar2[i] = ar2[j];
        ar2[j] = temp;
    }

    temp = ar2[R];
    ar2[R] = ar2[i+1];
    ar2[i+1] = temp;
}

return (i+1);
}
4

1 に答える 1

1

このコードは、私が正しく理解していれば、ピボットを最終的な位置に移動するので、forループの外側にあるはずだと思います。

temp = ar2[R];
ar2[R] = ar2[i+1];
ar2[i+1] = temp;
于 2013-03-18T21:46:15.967 に答える