我是一名计算机科学专业的学生(刚开始学习),我正在尝试将伪代码转换为快速排序的随机枢轴版本。我已经编写并测试了它,一切都运行得非常完美,但是...
分区部分看起来有点复杂,感觉可能漏掉了什么或者想得太多了。我无法确定它是否正确或者是否犯了可避免的错误。
长话短说:它可以工作,但如何更好地实现呢?
非常感谢您提供的所有帮助。
分区部分看起来有点复杂,感觉可能漏掉了什么或者想得太多了。我无法确定它是否正确或者是否犯了可避免的错误。
长话短说:它可以工作,但如何更好地实现呢?
非常感谢您提供的所有帮助。
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++;
}
}
}
int pivotpos = 3;
(由公平的骰子掷出选择) - user2864740