我想在數組上使用快速排序,但是我不完全確定我在做什麼錯誤。我在訂單編號應當是C陣列分區
-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);
這是實現我的quicksort:
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);
}
}
請告訴你如何調用樣品上的分割碼數據集 - 特別是'left'和'right'的值是什麼?我懷疑'rightPoint = right + 1',但是......這取決於。另外,在風格上,不要將增量或減量運算符與它們的操作數分開。 –