1 void BiSelectSort( int a[ ], int n ) /* 双向选择排序函数 */ 2 { int i, j, k, kmax, kmin, t; 3 for( i=0, j=n-1; i<j; ++i, --j ) 4 { kmin=kmax=i; 5 for( k=i+1; k<=j; ++k ) //一趟扫描找出最大值和最小值 6 { if( a[k]<a[kmin] ) kmin=k; 7 if( a[k]>a[kmax] ) kmax=k; 8 } 9 //区分四种情况,分别进行处理,通常没有被人意识到而导致错误 10 if( kmin==j && kmax==i ) //1. 11 { t=a[i]; 12 a[i]=a[j]; 13 a[j]=t; 14 } 15 // else if( kmin==j && kmax!=i ) //2.省略这种情况,可在第四种情况下处理 16 // { t=a[i]; 17 // a[i]=a[kmin]; 18 // a[kmin]=a[i]; 19 // t=a[j]; 20 // a[j]=a[kmax]; 21 // a[kmax]=t; 22 // } 23 else if( kmax==i && kmin!=j ) //3. 24 { t=a[j]; 25 a[j]=a[kmax]; 26 a[kmax]=t; 27 t=a[i]; 28 a[i]=a[kmin]; 29 a[kmin]=t; 30 } 31 else //4. 32 { if( kmin!=i ) 33 { t=a[i]; 34 a[i]=a[kmin]; 35 a[kmin]=t; 36 } 37 if( kmax!=j ) 38 { t=a[j]; 39 a[j]=a[kmax]; 40 a[kmax]=t; 41 } 42 } 43 } 44 }
时间: 2024-10-13 16:19:26