Я реализую quicksort, который оказался ложным. Я не могу понять, где это происходит. Я хочу реализовать версию, в которой изменение индекса i и j находится внутри while, а loop. в то время как condition.can кто-нибудь поможет мне узнать, почему этот код идет не так.False в quicksort code
void qsort3(int *x,int l,int u){
if(l>=u)
return;
//swap(x[l],x[l+rand()%(u-l)]);
int t=x[l];
int i=l+1;
int j=u;
//i stop on element>=t
//j stop on element<=t
while(true){
while(i<u&&x[i]<t){
i++;
}
while(x[j]>t){
j--;
}
if(i>=j)
break;
swap(x[i],x[j]);
}
swap(x[l],x[j]);
qsort3(x,l,j-1);
qsort3(x,j+1,u);
}
Я проверить этот случай, int y[]={3,4,1,10,3,2,1,1},qsort3(y,0,7)
, он не выйдет на самом деле, эта программа будет неправильно, если после обмена (х [г], х [у]), х [я] и х [у] оба равны , равным поворотному значению. В этом случае цикл while будет бесконечным циклом, который не будет выходить из , если я изменю while(i<u&&x[i]<=t)
, это будет хорошо функционировать на равном элементе.
Этот вопрос, как представляется, не по теме, поскольку речь идет не о C++, но принадлежат к проверке кода – Walter
Что вы имеете в виду «в то время как loop.not в состоянии в то время как»? Что пошло не так? – doctorlove
некоторая quicksort реализована как while (a [++ i]
witrus