在csdn上搜了好多篇关于二元选择排序的代码发现居然没有一个能完美通过所有样例的…于是只好自己捣鼓了半天,确实比我原以为的麻烦多了,要是竞赛题的话debug的时间估计占大头…debug了好久总算好像没有问题出现(也说不定还有,欢迎提供样例)
思路就不说了,其他文章都说的很好了,我简单说明一下需要处理的特殊情况(一定要多搞一些奇怪的样例来试啊):
- 最大值刚好与最小值交换时记得只交换一次
- 最大值刚好与最左需要排列的位置交换,记得先换最大值(相反同理)
- 有一个最值不需要交换
附代码:
// 二元选择排序
public static int[] selectSort2(int[] num) {
int temp;
for (int i = 0; i < num.length / 2; i++) {
int min = i, max = i;
for (int j = i + 1; j < num.length - i; j++)