站内搜索: 请输入搜索关键词

当前页面: 开发资料首页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));


↑返回目录
前一篇: 我想把一个文件转码成utf8的,但是文件中出现了乱码,希望高手指点(内附代码)
后一篇: 一个JAVA题帮我看一下呀