配列でクイックソートを使用しようとしていますが、何が間違っているのか完全にはわかりません。順番に私の番号は
-2 0 1 4 7 9 11 12 15
しかし、私は得ています:
0 1 4 7 15 12 11 9 -2
ここに私のパーティションコードがあります:
int partition( int* a, int left, int right)
{
int pivot, leftPoint, rightPoint, temp;
pivot = a[left];
leftPoint = left;
rightPoint = right + 1;
while(rightPoint > leftPoint)
{
while(a[leftPoint] <= pivot && leftPoint <= right)
leftPoint ++;
while(a[rightPoint] > pivot)
rightPoint --;
temp = a[leftPoint];
a[leftPoint] = a[rightPoint];
a[rightPoint] = temp;
}
temp = a[left];
a[left] = a[rightPoint];
a[rightPoint] = temp;
return rightPoint;
}
ここで私のアルゴリズムの何が問題なのかを説明してくれる人はいますか?
編集:これは私の最初の配列です:
7 12 1 -2 0 15 4 11 9
私はクイックソートを次のように呼び出します
quicksort(a, 0, 8);
これは私のクイックソートの実装です:
void quickSort( int a[], int low, int high)
{
int pivotPoint;
if(low < high)
{
// divide and conquer
pivotPoint = partition( a, low, high);
quickSort( a, low, pivotPoint);
quickSort( a, pivotPoint + 1, high);
}
}