排列数组元素正负零

时间:2014-02-15 13:51:21

标签: java arrays

如何在数组中放置零,我重新排列了正数和负数但是如何为零做,下面是我的代码。

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我正在寻找具有最小比较的解决方案。

1 个答案:

答案 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,