代码之家  ›  专栏  ›  技术社区  ›  Vivek Dhiman

排列数组元素正负零

  •  1
  • Vivek Dhiman  · 技术社区  · 11 年前

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

    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 回复  |  直到 11 年前
        1
  •  0
  •   Ashot Karakhanyan    11 年前

    这是解决问题的代码。我添加了现有算法的类似部分(对原始算法做了一些修改,现在检查 >=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,