如何使用冒泡排序对2D数组进行排序?

时间:2018-11-12 04:11:25

标签: c arrays sorting multidimensional-array 2d

我需要基于最后一列使用冒泡排序按行对2D数组进行降序排序,但是我遇到了一些麻烦。

这是我需要按降序排列的数据,但仅基于最后一列。

6814.00      85.00      86.00      92.00      88.00      87.75
7234.00      76.00      81.00      84.00      78.00      79.75
6465.00      87.00      54.00      68.00      72.00      70.25
7899.00      92.00      90.00      88.00      86.00      89.00
9901.00      45.00      78.00      79.00      80.00      70.50
8234.00      77.00      87.00      84.00      98.00      86.50
7934.00      76.00      91.00      84.00      65.00      79.00
7284.00      56.00      81.00      87.00      98.00      80.50
7654.00      76.00      87.00      84.00      88.00      83.75
3534.00      86.00      81.00      84.00      73.00      81.00

这是我到目前为止所拥有的。

for(int i = 0; i < 10; i++)
  {
    for(int j = 0; j < 6; j++)
    {
      if(arr1[i][5] < arr1[i+1][5])
      {
        int temp = arr1[i][j];
        arr1[i][j] = arr1[i+1][j];
        arr1[i+1][j] = temp;
      }
    }
  }

但这就是我得到的,显然是行不通的。

    6814.00      85.00      86.00      92.00      88.00      87.75
    7234.00      76.00      81.00      84.00      78.00      79.75
    7899.00      92.00      90.00      88.00      86.00      89.00
    9901.00      45.00      78.00      79.00      80.00      70.50
    8234.00      77.00      87.00      84.00      98.00      86.50
    7934.00      76.00      91.00      84.00      65.00      79.00
    7284.00      56.00      81.00      87.00      98.00      80.50
    7654.00      76.00      87.00      84.00      88.00      83.75
    3534.00      86.00      81.00      84.00      73.00      81.00
    6465.00      87.00      54.00      68.00      72.00      70.00   

我还注意到最后一列中的一些数字被四舍五入,我不确定为什么。感谢您能提供的任何帮助。

3 个答案:

答案 0 :(得分:0)

如果只关心最后一列的顺序,只需检查最后一列,然后相应地移动整行:

void BubbleSort2D(double arr1[][]){
    for(int m=0; m<10; m++) {
        for(int i = 0; i < 9; i++)
          {
              if(arr1[i][5] < arr1[i+1][5])
              {
                for(int j = 0; j < 6; j++)
                {
                  double temp = arr1[i][j];
                  arr1[i][j] = arr1[i+1][j];
                  arr1[i+1][j] = temp;
                }
              }
          }
    }
}

public static void main(String args[]) {
    double[][] arr2D = { {6814.00,      85.00,      86.00,      92.00,      88.00,      87.75},
            {7234.00,      76.00,      81.00,      84.00,      78.00,      79.75},
            {6465.00 ,     87.00,      54.00,      68.00,      72.00,      70.25},
            {7899.00,      92.00,      90.00,      88.00,      86.00,      89.00},
            {9901.00,      45.00,      78.00,      79.00,      80.00,      70.50},
            {8234.00,      77.00,      87.00,      84.00,      98.00,      86.50},
            {7934.00,      76.00,      91.00,      84.00,      65.00,      79.00},
            {7284.00,      56.00,      81.00,      87.00,      98.00,      80.50},
            {7654.00,      76.00,      87.00,      84.00,      88.00,      83.75},
            {3534.00,      86.00,      81.00,      84.00,      73.00,      81.00} };
    driver.BubbleSort2D(arr2D);
    for(int m=0; m<9; m++) {
        for(int i = 0; i < 6; i++)
          {
            System.out.print(arr2D[m][i] + "  ");
          }
        System.out.println();
          }
}

输出:

7899.0 92.0 90.0 88.0 86.0 89.0
6814.0 85.0 86.0 92.0 88.0 87.75
8234.0 77.0 87.0 84.0 98.0 86.5
7654.0 76.0 87.0 84.0 88.0 83.75
3534.0 86.0 81.0 84.0 73.0 81.0
7284.0 56.0 81.0 87.0 98.0 80.5
7234.0 76.0 81.0 84.0 78.0 79.75
7934.0 76.0 91.0 84.0 65.0 79.0
9901.0 45.0 78.0 79.0 80.0 70.5

答案 1 :(得分:0)

最简单的方法是一次可以整行然后对其进行排序。

for(int i=0;i<10;i++)
{
    int array[6];
    for(int j=0;j<6;j++)
    {
         array[j] = arr1[i][j];
    }
    for(i=0; i<(n-1); i++)
    {
        for(j=0; j<(n-i-1); j++)
        {
             if(array[j]>array[j+1])
             {
                 temp=array[j];
                 array[j]=array[j+1];
                 array[j+1]=temp;
             }
        }
    }
    for(int j=0;j<6;j++)
    {
         arr1[i][j] = array[j];
    }
}

答案 2 :(得分:0)

检查。

for(int i = 1; i <=9; i++)
      {
        for(int j = 9; i <= j; j--) //edit.
        {
          if(arr1[j][5] > arr1[j-1][5])
          {
            for(int k = 0; k <= 5; k++)
            {               
                int temp = arr1[j][k];
                arr1[j][k] = arr1[j-1][k];
                arr1[j-1][k] = temp;    
            }
          }
        }
      }