如何在数组中放置零,我重新排列了正数和负数但是如何为零做,下面是我的代码。
int i = 0;
int arr[] = { 3, 7,-12, 8, -1, 6, -6, 5, -2};
int j = arr.length - 1;
while (true) {
if (arr[i] > 0) {
++i;
}
if (arr[j] < 0) {
--j;
}
if (i > j)
break;
if (arr[i] < 0 && arr[j] > 0) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
for (int j2 = 0; j2 < arr.length; j2++) {
System.out.print(arr[j2]);
}
如果我在数组中放置零,它不会显示任何输出。否则它给37586-1-6-12-2
我正在寻找具有最小比较的解决方案。
答案 0 :(得分:0)
这是解决问题的代码。我添加了现有算法的类似部分(原来我做了一点改动,现在检查>=0
而不是>0
)。在第二部分中,我对正数和0
数字做同样的事情。
int i = 0;
int arr[] = {0, 3, 7, -12, 8, -1, 0, 6, -6, 5, -2, 0, -1, 0};
int j = arr.length - 1;
while (true) {
if (arr[i] >= 0) {
++i;
}
if (arr[j] < 0) {
--j;
}
if (i > j)
break;
if (arr[i] < 0 && arr[j] >= 0) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// The second part for positives and 0-s, starting for [0, j] (j is not changed)
i = 0;
while (true) {
if (arr[i] > 0) {
++i;
}
if (arr[j] == 0) {
--j;
}
if (i > j)
break;
if (arr[i] == 0 && arr[j] > 0) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
for (int anArr : arr) {
System.out.print(anArr + ", ");
}
结果是:
5, 3, 7, 6, 8, 0, 0, 0, 0, -6, -2, -1, -1, -12,