修改后的双向选择排序函数
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
相关文章推荐
- Edge Animate初篇教程(二)
- 第二章 OSI参考模型和TCP/IP模型
- 地图实现地点查找和导航
- iOS项目开发实战(Swift)—代理的使用
- LeetCode-- Reverse Linked List II
- 【DP】hdu3507
- 【Information:java: javacTask: 源发行版 1.7 需要目标发行版 1.7】
- svn代码回滚命令
- Linux系统启动流程详解
- Zookeeper超级用户
- 我的大学——学习生活总结
- 每个人都应该知道的14个电脑使用技巧
- Git 的 .gitignore 配置
- SQL基础---增删查询操作
- autoload-cache-2.4 发布
- Spark使用经验分享
- 如何用VisualStudio2013、VisualStudioTools命令行 编写C语言程序
- JAVA AQS源码分析
- 找出文件中的完全平方数
- compass模块----Helpers