在Java中排序0和1

时间:2018-10-08 16:38:42

标签: java arrays sorting indexoutofboundsexception

无法在代码中找出问题 它说线程“ main”中的异常java.lang.ArrayIndexOutOfBoundsException:6 我已经经历了很多次,仍然无法弄清楚出了什么问题

注意:尝试对数组中的0、1进行排序

public class javaarray {

    public static void main(String[] args) {

        int[] arr = new int[]{1, 0, 0, 1, 1, 0}; 
        int left = 0, right =arr.length-1;
        while(left<right) {
            while(arr[left]==0 && left<right) {
                left++;
            }
            while(arr[right]==1 && left<right){
                right++;
            }
            if(left<right) {
                arr[left]=0;
                arr[right]=1;
                left++;
                right--;
              }  
           }

           for(int i=0; i<arr.length;i++) {
               System.out.print(arr[i]) 
           }
       }
    }

}

3 个答案:

答案 0 :(得分:0)

这些行

while(arr[right]==1 && left<right){
  right++;
}

应该是

while(arr[right]==1 && left<right){
  right--;
}

答案 1 :(得分:0)

如果它只是0-1数组,则应计算零和其中的一个,并在所有零之后打印所有的一:

    int[] arr = new int[]{1,0,0,1,1,0};
    int zerosCount = 0;
    for (int e: arr) {
        if (e == 0) {
            ++zerosCount;
        }
    }
    for (int i = 0; i < zerosCount; ++i) {
        System.out.print(0);
    }
    for (int i = zerosCount; i < arr.length; ++i) {
        System.out.print(1);
    }

这种方法具有线性复杂性。

答案 2 :(得分:0)

一种更有效的方法(仅适用于包含0和1的数组):

int[] arr = new int[]{1, 0, 0, 1, 1, 0};
int current = 0;
int total = 0;

while (current < arr.legth) {
    total += arr[current];
    current++;
}

current = 0;
int[] sortedArr = new int[arr.length];

while (current < sortedArr.legth) {
    if (current < sortedArr.legth - total) {
        sortedArr[current] = 0;
    } else {
        sortedArr[current] = 1;
    }
}

for (int i = 0; i < sortedArr.length; i++) {
    System.out.print(sortedArr[i]) 
}