关于二维数组进行冒泡排序的问题,帮忙说下思路,需要用到几层循环实现,一直没写出来,
二维数组的冒泡排序,关于二维数组进行冒泡排序的问题,帮忙说下思路,需要用到几层循环实现,一直没写出来,不知道是不是思路错了。
基本思路就是将二维数组转换成一维数组,再对一维数组进行冒泡排序,
再将排好序的一维数组转换成二维数组 ,最后按照两行三列的格式输出即可。难点就是在于
数组间的转换问题。
#include <stdio.h> main() { int a[2][3]={3,11,1,6,14,414}; int i,j,k,b[6]; int temp; int y,z; //一维数组转换成二维数组时候用到 k=0; //初始化 k 的值 //转换为一维数组 for(i=0;i<2;i++) { for(j=0;j<3;j++) { b[k]=a[i][j]; k++; } } //对一维数组 b[6] 进行冒泡排序 for(j=0;j<5;j++) { for(i=0;i<5-j;i++) { if(b[i]>b[i+1]) { temp=b[i]; b[i]=b[i+1]; b[i+1]=temp; } } } //再将排好序的一维数组 b[6]转换成二维数组 a[2][3],并按一定格式输出 //重新定义一个变量 y z,是为了避免变量之间的冲突 for(y=0;y<2;y++) { for(z=0;z<3;z++) { a[y][z]=b[y*3+z]; //这一步要好好理解,为什么是 y*3+z ?很关键的一步 } } //输出 两行三列的二维数组 for(i=1;i<=2;i++) { for(j=1;j<=3;j++) { printf("%4d",a[i-1][j-1]); if(j%3==0) //当满足每行三个数时就换行 printf("\n"); } } }
#include <stdio.h> main() { int a[2][3]={3,11,1,6,14,414}; int *p = &a[0][0]; // int i,j; int temp; for(j=0;j<5;j++) { for(i=0;i<5-j;i++) { if(p[i]>p[i+1]) { temp=p[i]; p[i]=p[i+1]; p[i+1]=temp; } } } for(i=1;i<=2;i++) { for(j=1;j<=3;j++) { printf("%4d",a[i-1][j-1]); if(j%3==0) //当满足每行三个数时就换行 printf("\n"); } } }