r[j]^=r[i];
r[i]^=r[j];
r[j]^=r[i];
必須排除I==j。也就是自己和自己的交換。
比如:
a = 9;
a^=a;/*a=0*/
a^=a;/*a=0*/
a^=a;/*a=0*/
a不再是10。
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
void quicksort(int R[],int s,int t)
{
int i,j;
內部溫度;
if(s & lt;t)
{
temp = R[s];/*選擇第壹個數字作為參考*/
/*while(我!=j)不要這樣判斷循環的結束,以防i==j-1,i++,j-在I > j之後!=這種情況救不了妳*/
for(i=s+1,j = t;我& lt= j;I++,j-)/*不包括參考號,左右陣營站隊*/
{
while(j & gt;我& amp& ampr[j]& gt;= temp)/* R[j]& gt;不要=temp,最好加上。畢竟站左站右都不重要。
j-;
while(我& lt強生公司。& ampr[I]& lt;=溫度)
i++;
如果(我!=j){/*i不能等於j*/
r[j]^=r[i];
r[i]^=r[j];
r[j]^=r[i];
}
}
I-;
if(R[s]& lt;r[I])I-;/*調整I的值,使I指向小於或等於參考數的最後壹個位置*/
/*用最後壹個小於或等於參考號的數字交換參考號,這樣就真正把左右陣營分開了*/
R[s]= R[I];
r[I]= temp;
快速排序(R,s,I-1);
quicksort(R,i+1,t);
}
}
int main(void)
{
int I;
int a[]={5,3,2,1,9,8,7,4,5 };
quicksort(a,0,sizeof(a)/sizeof(int)-1);
for(I = 0;我& ltsizeof(a)/sizeof(int);i++)
printf(" % d " ,*(a+I));
返回0;
}