我是一名計算機科學專業的學生(剛開始),我正在從僞代碼編寫Quicksort的隨機化樞軸版本。我已經編寫並測試了它,但它仍然完美地工作,但是...C隨機樞軸快速排序(改進分區功能)
分區部分看起來有點太複雜,因爲它感覺我錯過了某些東西或者推翻了它。我無法理解,如果沒關係,或者我犯了一些可以避免的錯誤。
這麼久以來的故事很短:它有效,但如何做得更好?
預先感謝所有幫助
void partition(int a[],int start,int end)
{
srand (time(NULL));
int pivotpos = 3; //start + rand() % (end-start);
int i = start; // index 1
int j = end; // index 2
int flag = 1;
int pivot = a[pivotpos]; // sets the pivot's value
while(i<j && flag) // main loop
{
flag = 0;
while (a[i]<pivot)
{
i++;
}
while (a[j]>pivot)
{
j--;
}
if(a[i]>a[j]) // swap && sets new pivot, and restores the flag
{
swap(&a[i],&a[j]);
if(pivotpos == i)
pivotpos = j;
else if(pivotpos == j)
pivotpos = i;
flag++;
}
else if(a[i] == a[j]) // avoids getting suck on a mirror of values (fx pivot on pos 3 of : 1-0-0-1-1)
{
if(pivotpos == i)
j--;
else if(pivotpos == j)
i++;
else
{
i++;
j--;
}
flag++;
}
}
}
隨機化樞軸的代碼在哪裏? – jfly
@jfly'int pivotpos = 3;'([由公平骰子卷選擇](http://xkcd.com/221/)) – user2864740
請參閱http://p2p.wrox.com/visual-c/66347-quick -sort -c-code.html – user2864740