设计一个整数排序算法,规则很简单:
1、同为正数或者同为负数,小的排前,大的排后。
2、所有负数大于所有正数。所有正数排前,负数排后。
3、零最小。排最前。
直接上代码:
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import org.junit.Test;
public class TestComparator {
@Test
public void testInt() {
List<Integer> list=new ArrayList<Integer>();
list.add(3222222);
list.add(-1000);
list.add(1000);
list.add(1323235);
list.add(-1065650);
list.add(145466);
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if(o1*o2>0) {
return o1-o2;
}else if(o1*o2<0){
return o2-o1;
}else {
return o1==0?-1:1;
}
}
});
System.out.println(list);
}
}
期望结果:1000 145466 1323235 3222222 -1000 -1065650
实际输出结果:[1000, 1323235, 145466, -1065650, -1000, 3222222]
我对compare函数返回值的理解是:
返回值为负数,两个比较对象不交换位置;
返回值为正数或0,两个比较对象交换位置;
是理解上存在问题,还是代码逻辑上存在问题?请各位指导。