您的位置:首页 > 其它

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

2015-12-02 10:32 267 查看
void BiSelectSort( int a[ ], int n )    /* 双向选择排序函数 */
{   int i, j, k, kmax, kmin, t;
for( i=0, j=n-1; i<j; ++i, --j  )
{   kmin=kmax=i;
for( k=i+1; k<=j; ++k )        //一趟扫描找出最大值和最小值
{   if( a[k]<a[kmin] )  kmin=k;
if( a[k]>a[kmax] )  kmax=k;
}
//区分四种情况,分别进行处理,通常没有被人意识到而导致错误
if( kmin==j && kmax==i )    //1.
{    t=a[i];
a[i]=a[j];
a[j]=t;
}
//        else if( kmin==j && kmax!=i )    //2.省略这种情况,可在第四种情况下处理
//        {    t=a[i];
//            a[i]=a[kmin];
//            a[kmin]=a[i];
//            t=a[j];
//            a[j]=a[kmax];
//            a[kmax]=t;
//        }
else if( kmax==i && kmin!=j )    //3.
{    t=a[j];
a[j]=a[kmax];
a[kmax]=t;
t=a[i];
a[i]=a[kmin];
a[kmin]=t;
}
else                            //4.
{    if( kmin!=i )
{   t=a[i];
a[i]=a[kmin];
a[kmin]=t;
}
if( kmax!=j )
{   t=a[j];
a[j]=a[kmax];
a[kmax]=t;
}
}
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: