二維數(shù)組如何進(jìn)行冒泡排序
一維數(shù)組進(jìn)行冒泡排序很簡單,二維數(shù)組冒泡排序有點麻煩,不過只要你會了一維數(shù)組冒泡排序看這些內(nèi)容很簡單。其實可以直接對二維數(shù)組進(jìn)行冒泡,但是為了好理解,我使用了數(shù)組的轉(zhuǎn)換,這個是我花了一個小時研究出來的,當(dāng)同學(xué)問我怎么對二維數(shù)組進(jìn)行冒泡,雖然以前沒做過,但是當(dāng)時我的腦海中就有了這個思路,不過在實際的編寫代碼過程中問題不是我想的那么一帆風(fēng)順。數(shù)組間的轉(zhuǎn)換就是一個問題,所以對二維數(shù)組進(jìn)行冒泡排序之前,我又抽時間研究了數(shù)組轉(zhuǎn)換問題,最后將它們整合在一起,于是工作完成!
思路以及注意點、說明我都加在了代碼旁邊的注釋里,好好悟悟!
此日志對于不懂c語言的朋友們來說絕對是天書,看起來很枯燥,可以瞄一眼直接飄過??!
/*基本思路就是將二維數(shù)組轉(zhuǎn)換成一維數(shù)組,再對一維數(shù)組進(jìn)行冒泡排序,
再將排好序的一維數(shù)組轉(zhuǎn)換成二維數(shù)組 ,最后按照兩行三列的格式輸出即可。難點就是在于
數(shù)組間的轉(zhuǎn)換問題*/
#include
main()
{
int a[2][3]={3,2,1,6,5,4};
int i,j,k,b[6];
int temp;
int y,z; //一維數(shù)組轉(zhuǎn)換成二維數(shù)組時候用到
k=0; //初始化 k 的值
//轉(zhuǎn)換為一維數(shù)組
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[k]=a[i][j];
k++;
}
}
//對一維數(shù)組 b[6] 進(jìn)行冒泡排序
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;
}
}
}
//再將排好序的一維數(shù)組 b[6]轉(zhuǎn)換成二維數(shù)組 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 ?很關(guān)鍵的一步
}
}
//輸出 兩行三列的二維數(shù)組
for(i=1;i<=2;i++)
{
for(j=1;j<=3;j++)
{
printf("%3d",a[i-1][j-1]);
if(j%3==0) //當(dāng)滿足每行三個數(shù)時就換行
printf("");
}
}
}
如果你能真正的對我寫的代碼理解透徹,那么一維數(shù)組冒泡排序、二維數(shù)組冒泡排序、數(shù)組間的轉(zhuǎn)換那就沒問題了?。?!
還是那句老話:多看、多學(xué)、多思!這是我學(xué)編程的指導(dǎo)!
評論