写的代码或许有缀余的当地,不过是为了好了解,有些当地能够简化,可是简化之后或许关于刚开始学c言语的通来说不好了解。
一维数组进行冒泡排序很简单,二维数组冒泡排序有点费事,不过只需你会了一维数组冒泡排序看这些内容很简单。其实能够直接对二维数组进行冒泡,可是为了好了解,我使用了数组的转化,这个是我花了一个小时研讨出来的,当同学问我怎样对二维数组进行冒泡,尽管曾经没做过,可是其时我的脑海中就有了这个思路,不过在实践的编写代码过程中问题不是我想的那么一往无前。数组间的转化便是一个问题,所以对二维数组进行冒泡排序之前,我又抽时间研讨了数组转化问题,最终将它们整合在一起,所以作业完结!
思路以及留意点、阐明我都加在了代码周围的注释里,好好悟悟!
此日志关于不明白c言语的朋友们来说肯定是天书,看起来很单调,能够瞄一眼直接飘过!!
/*基本思路便是将二维数组转化成一维数组,再对一维数组进行冒泡排序,
再将排好序的一维数组转化成二维数组 ,最终依照两行三列的格局输出即可。难点便是在于
数组间的转化问题*/
#include
main()
{
int a[2][3]={3,2,1,6,5,4};
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(“%3d”,a[i-1][j-1]);
if(j%3==0) //当满意每行三个数时就换行
printf(“”);
}
}
}
假如你能真实的对我写的代码了解透彻,那么一维数组冒泡排序、二维数组冒泡排序、数组间的转化那就没问题了!!!
仍是那句老话:多看、多学、多思!这是我学编程的辅导!