修改后的双向选择排序函数

 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 }
View Code

 

posted @ 2015-12-02 10:32  九头狮  阅读(678)  评论(1)    收藏  举报