當前位置:成語大全網 - 新華字典 - 菜鳥問題c語言關於快速排序

菜鳥問題c語言關於快速排序

其實我最想解釋的是交換的代碼。

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;

}