二维阵列Java上的冒泡排序

时间:2014-04-25 03:30:14

标签: java arrays bubble-sort

String[][] 2dArray = new String[counter][2];
2dArray [counter][column1] = String.valueOf(counter);
2dArray [counter][column2] = "something something something";
for(int i = 0; i < 2dArray.length-1; i++){
     for(int j = i + 1; j > 0; j--){
       if(2dArray[i][j] < 2dArray[i-1][j]){ 
           int[][] temp = 2dArray[i-1][j];
           2dArray[i-1][j] = 2dArray[i][j];
           2dArray[i][j] = temp;                  
       }
     }
}

尝试对数组进行排序,以便第1列升序。我已经在这里研究了其他参考文献并模仿它们但由于某种原因我的IDE不喜欢上面的...

5 个答案:

答案 0 :(得分:1)

如果我理解正确,我会建议如下:

您需要做的是比较数组的Integer值:

if(Integer.valueOf(2dArray[i][0]) < Integer.valueOf(2dArray[i-1][0])){

您不包含j的原因是因为您只按第一列的值排序。 2dArray[i][0]可以获得您在该特定行的counter的价值。

我还在代码中看到了一些可以使用修复的其他内容:

for(int i = 0; i < 2dArray.length; i++){
  for(int j = i; j < 2dArray.length; j++){
    if(Integer.valueOf(2dArray[j][0]) > Integer.valueOf(2dArray[j+1][0])){
       String temp[] = 2dArray[j+1];
       2dArray[j+1] = 2dArray[j];
       2dArray[j] = temp;                  
    }
  }
}

这更符合我认为的BubbleSort的经典实现:

private static void bubblesort(Integer[] array) {
    for (int i = 0; i < array.length; i++) {
        for(int j = 0; j < array.length - 1; j++) {
            if(array[j].compareTo(array[j+1]) > 0) {
                swap(j, j+1, array);
            }
        }
    }

}

private static void swap(Integer index1, Integer index2, Integer[] array) {
    if(index1 == index2)return;
    Integer temp = new Integer(array[index2]);
    array[index2] = array[index1];
    array[index1] = temp;

}

除了你的情况,我将你的数组视为一维,因为你只是按一维排序。

答案 1 :(得分:1)

如果2dArray是二维字符串数组,如

String[][] 2dArray

然后可以使用

比较两个字符串

if(2dArray[i][j].compareTo(2dArray[i-1][j]) > 0)

答案 2 :(得分:1)

这会解决它吗?

for (int i = 0; i < 2dArray.length-1; i++){

          for(int j = 0; j < 2dArray.length-1; j++){

              if(2dArray[j][0].compareTo(2dArray[j+1][0])>0){

                String[] temp = 2dArray[j];
                2dArray[j] = 2dArray[j+1];
                2dArray[j+1] = temp;                  
              }
          }
        }

答案 3 :(得分:-1)

char[][] temp = 2dArray[i-1][j];

当你将char / int / ...(每个第一个响应)放入二维char数组时,你的IDE不喜欢你(120%)。

答案 4 :(得分:-1)

for(int i=0;i<2dArray.length-2;i++){
    for(int j=0;j<2dArray[i].length-1;j++){
            if(2dArray[i][j]>2dArray[i+1][j]){
                int temp=2dArray[i][j];
                2dArray[i][j]=2dArray[i+1][j];
                2dArray[i+1][j]=temp;
            }
    }
}