当前页面: 开发资料首页 → J2SE 专题 → 一个小排序问题。。。
一个小排序问题。。。
摘要: 一个小排序问题。。。
String[] a = {"658",null,"456","78","98",null,"52"};
有一个类似于这样的数组,现在我想把null的值移到最后面。类似于:
String[] a = {"658","456","78","98","52",null,null};
条件是只能用一个for循环,并且尽量不要用第二个变量。
总的来说,就是在数组本身内进行排序。。
思路很简单了,但是一个实质的循环完成不了,肯定要借助goto来模拟一个循环做到.
把前面的null替换靠后面的非null就可以了.
String[] a = {"658",null,"456","78","98",null,"52"};
String[] b = new String[a.length];
for (int i = 0, j = 0; i < a.length; i++) {
if (a[i] != null) {
b[j++] = a[i];
}
}
a = b;
我想还是不要浪费时间了,想那么复杂的算法干什么,实用就是真理,呵呵
对了,既然healer_kx(天降甘草处于好事多魔期间?!) 提到了GOTO,我想再顺便问下在JAVA中GOTO是不是仅仅是个关键字而已,而不能有任何作用?
呵呵,twenty_three(花非花)的办法不错,如果实在不行的话,我就这么做了....
顺便问一下,a = b这句话是不是有问题?我记得java中把b付给a的话,
a仅仅是b的一个指针吧?
public class ArraySort {
public static void main(String[] args) {
String[] a = {"658",null,"456","78","98",null,"52"};
int p = a.length-1;
for(int i=p; i>=0; i--) {
if(a[i]==null) {
a[i] = a[p];
a[p--] = null;
}
}
for(int i=0; i
}
}
输出:
658
52
456
78
98
null
null
我认为楼上的方法是最好的了!
利用两个标记变量,效率为O(n)
呵呵,多谢各位的回帖,结分啦~~~
String[] a = {"658",null,"456","78","98",null,"52"};
Arrays.sort(a,new Comparator(){
public int compare(Object o1, Object o2) {
if(o1==null)return 1;
if(o2==null)return -1;
return 0;
}
}
);
System.out.println(Arrays.asList(a));