【发布时间】:2016-03-07 03:09:05
【问题描述】:
我想在一个数组中分隔负数和正数。
例如,如果我的数组有 10 个值并且它们是 {-8,7,3,-1,0,2,-2,4,-6,7},我希望新修改的数组是 { -6,-2,-1,-8,7,3,0,2,4,7}。
我想在 O(n^2) 中执行此操作,并且我也编写了代码。但我没有得到正确的输出。我的代码哪里错了?
import java.util.Random;
public class Apples {
public static void main(String[] args) {
Random randomInteger=new Random();
int[] a=new int[100];
for(int i=0;i<a.length;i++)
{
a[i]=randomInteger.nextInt((int)System.currentTimeMillis())%20 - 10;
}
for(int i=0;i<a.length;i++)
{
if(a[i]<0)
{
int temp=a[i];
for(int j=i;j>0;j--)
{
a[j]=a[j-1];
j--;
}
a[0]=temp;
}
}
for(int i=0;i<a.length;i++)
{
System.out.print(a[i]+" ");
}
}
}
【问题讨论】:
-
确定数字顺序的规则是什么,尤其是在这些符号相同的情况下?负数输入的反转和非负数输入的顺序相同?
-
对不起,我不太明白你的评论。我只是想把所有的负数扔到数组的开头。这样到最后,我将在开始时拥有所有负数,然后是正数(包括零)。
-
删除
j--;行,因为你是在 for 循环中完成的 -
@Jerry06 非常感谢。那真是个愚蠢的错误。除此之外,代码非常好,对吧?另外,我如何选择您的评论作为正确答案?我是 stackoverflow 的新手,所以我不知道。
-
将所有负数扔到一边,而将正数扔到另一边可以通过排序算法来完成。更好的是,如果每个组中的顺序无关紧要,只需对 QuickSort 或 HeapSort 算法进行一次迭代,其中枢轴等于 0。
标签: java arrays algorithm big-o