气泡排序中的2d阵列

问题描述 投票:0回答:5

我正在尝试用冒泡排序创建一个二维数组,由25以升序排列5数字5

我的意见

Enter 25 integers:
Input No.[0][0]: 4
Input No.[0][1]: 5
Input No.[0][2]: 8
Input No.[0][3]: 9
Input No.[0][4]: 4
Input No.[1][0]: 2
Input No.[1][1]: 1
Input No.[1][2]: 0
Input No.[1][3]: 2
Input No.[1][4]: 4
Input No.[2][0]: 6
Input No.[2][1]: 7
Input No.[2][2]: 4
Input No.[2][3]: 5
Input No.[2][4]: 5
Input No.[3][0]: 4
Input No.[3][1]: 8
Input No.[3][2]: 9
Input No.[3][3]: 1
Input No.[3][4]: 2
Input No.[4][0]: 4
Input No.[4][1]: 5
Input No.[4][2]: 2
Input No.[4][3]: 1
Input No.[4][4]: 9

我的输出显示

Ascending:
  4  4  5  8  9
  0  1  2  2  4
  4  5  5  6  7
  1  2  4  8  9
  1  2  4  5  9

因为你可以看到它没有正确排列,它只排列了5个数字,每行不是整数

任何人都可以帮我安排这样的整数

Ascending:
      0  1  1  1  2
      2  2  2  4  4
      4  4  4  4  5
      5  5  5  6  7
      8  8  9  9  9

到目前为止这是我的代码

int main(){

    int rows = 5, cols = 5;
    int arr[rows][cols];
    int i,j,k,swap;


    printf("Enter 25 integers:\n");

    for(i = 0; i < rows; i++){
        for(j = 0; j < cols; j++){

     printf("Input No.[%d][%d]: ", i+0,j+0);
     scanf("%d", &arr[i][j]);
    }
}

    for(k = 0; k < rows; k++){   
        for(i = 0 ; i < cols; i++){
            for(j = i + 1; j < cols; j++){

        if(arr[k][i] > arr[k][j]){

        swap     = arr[k][i];
        arr[k][i]   = arr[k][j];
        arr[k][j] = swap;

            }
        }
    }
}

    printf("Ascending:\n");
    for( i = 0 ; i < rows; i++){
        for( j = 0 ; j < cols; j++){

    printf("%3d", arr[i][j]);
        }
    printf("\n");
    }

getch(); 

}
c multidimensional-array bubble-sort
5个回答
0
投票

您不一定需要创建一维数组,您可以认为您的二维数组是一维数组,并在设置/获取它们时转换坐标。考虑使用xy的结构点,ARR_LEN5

int from2Dto1D(point p){ return p.x+ p.y*ARR_LEN;}
Point from1Dto2D(int i){ Point p; p.x = i%ARR_LEN; p.y=i/ARR_LEN; return p;}

现在,您可以在2D正方形阵列上使用普通的气泡排序算法和一维索引,您只需要将索引转换为2个Point并使用这些Point访问/切换数据。 (2因为你需要PointindexPointindex+1


0
投票

然后将所有数组元素从二维数组放到一维数组中

对1-D数组进行排序,然后将1-D数组放入矩阵格式中

试试这个代码....根据上面给出的逻辑工作

    #include<stdio.h>

    int main(){
     int arr[5][5],l=0;
     int result[25],k=0,i,j,temp;
     arr[0][0]= 4;
     arr[0][1]= 5;
     arr[0][2]= 8;
     arr[0][3]= 9;
     arr[0][4]= 4;
     arr[1][0]= 2;
     arr[1][1]= 1;
     arr[1][2]= 0;
     arr[1][3]= 2;
     arr[1][4]= 4;
     arr[2][0]= 6;
     arr[2][1]= 7;
     arr[2][2]= 4;
     arr[2][3]= 5;
     arr[2][4]= 5;
     arr[3][0]= 4;
     arr[3][1]= 8;
     arr[3][2]= 9;
     arr[3][3]= 1;
     arr[3][4]= 2;
     arr[4][0]= 4;
     arr[4][1]= 5;
     arr[4][2]= 2;
     arr[4][3]= 1;
     arr[4][4]= 9;


      //convert 2 D array in 1 D array 
     for(i=0;i<5;i++){
       printf("\n");
       for(j=0;j<5;j++){
         printf(" %d",arr[i][j]);
         result[k++]=arr[i][j];
       } 
    }


   // sort 1 D array   
   for(i=0;i<25;i++){
     for(j=0;j<24;j++){
       if(result[j] > result[j+1]){
         temp=result[j];
         result[j]=result[j+1];
         result[j+1]=temp;
        }
      }
   }
  /*
   for(i=0;i<25;i++){
      printf("\n%d",result[i]);
   }*/


   // convert 1 D array to 2 D array  
   i=0;
   l=0;k=0;
   while(i<25){

     for(j=0;j<5;j++){
     arr[k][j]=result[l];
     l++;
   }
   k++;
   i=i+5;

   }

     //Print matrix i.e 2D array
    for(i=0;i<5;i++){
      printf("\n");
      for(j=0;j<5;j++){
        printf(" %d",arr[i][j]);
      }
    }
 }

0
投票

这有效!

#define COL 5
#define ROW 2
int main(){
int temp ; 
int arr[2][5]= {2,15,26,14,12,18,1,2,3,4 };

int arr2[10] = {0};
int index = 0 ; 
for(int t = 0 ; t<50 ; t++ ){
    for (int i =0 ; i < ROW ; i++){
        for( int j = 0; j < 5-1 ; j++){
            if (arr[i][j] > arr[i][j+1]){
                temp = arr[i][j];
                arr[i][j] = arr[i][j+1];
                arr[i][j+1] = temp;
            }
        }

        //checking for
        for( int k = 0 ; k < ROW-1 ; k++){
            if (arr[k][COL-1] > arr[k+1][0]){
                temp = arr[k][COL-1];
                arr[k][COL-1] = arr[k+1][0];
                arr[k+1][0] = temp ; 
            }
        }
        //---------
        }
    }
return 0 ; 
}

0
投票

改进Ahmad的答案,我想添加以下代码(用于按升序缩短表格):

#include <stdio.h>

#define COL 5
#define ROW 6

int main()
{
    int temp, t, i, j;
    int arr[ROW][COL]={30,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};

    for(t=1; t<(ROW*COL); t++)
    {
        for(i=0; i<ROW; i++)
        {
            for(j=0; j<COL-1; j++)
            {
                if (arr[i][j]>arr[i][j+1])
                {
                    temp=arr[i][j];
                    arr[i][j]=arr[i][j+1];
                    arr[i][j+1]=temp;
                }
            }
        }
        for(i=0; i<ROW-1; i++)
        {
            if (arr[i][COL-1]>arr[i+1][0])
            {
                temp=arr[i][COL-1];
                arr[i][COL-1]=arr[i+1][0];
                arr[i+1][0]=temp;
            }
        }
    }
    for(i=0; i<ROW; i++)
    {
        printf("\n");
        for(j=0; j<COL; j++)
            printf("%3d", arr[i][j]);
    }
    return 0; 
}

用您的表替换输入,并使用给定数组的大小替换定义,您就完成了。

执行时输出以上内容:

  1  2  3  4  5
  6  7  8  9 10
 11 12 13 14 15
 16 17 18 19 20
 21 22 23 24 25
 26 27 28 29 30

0
投票
void twoDimBubbleSort(int** arr, int row, int col) {
    for (int i = 0; i < (row * col); ++i) {
        for (int j = 0; j < (row * col) - 1; ++j) {
            int cr = j / col; // current row
            int cc = j % col; // current column
            int nr = (j + 1) / col; // next item row
            int nc = (j + 1) % col; // next item column

            if (arr[cr][cc] > arr[nr][nc])
                swap(&arr[cr][cc], &arr[nr][nc]); // any way you want to swap variables
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.