标题:关于二维数组进行冒泡排序的问题,帮忙说下思路,需要用到几层循环实现,一 ...
只看楼主
nuoyoyo
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2018-5-16
结帖率:80%
已结贴  问题点数:10 回复次数:6 
关于二维数组进行冒泡排序的问题,帮忙说下思路,需要用到几层循环实现,一直没写出来,
二维数组的冒泡排序,关于二维数组进行冒泡排序的问题,帮忙说下思路,需要用到几层循环实现,一直没写出来,不知道是不是思路错了。
搜索更多相关主题的帖子: 维数 冒泡排序 思路 循环 
2018-05-18 15:52
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:5 
基本思路就是将二维数组转换成一维数组,再对一维数组进行冒泡排序,
再将排好序的一维数组转换成二维数组 ,最后按照两行三列的格式输出即可。难点就是在于
数组间的转换问题。
2018-05-18 16:04
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:5 
程序代码:
#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");
      }

 }
}
2018-05-18 16:05
nuoyoyo
Rank: 1
等 级:新手上路
帖 子:9
专家分:4
注 册:2018-5-16
得分:0 
回复 3楼 自学的数学
可以直接用二维数组进行排序吗
2018-05-21 16:52
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
得分:0 
二维即一维,N维即一维
2018-05-21 17:48
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
得分:0 
程序代码:
#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");
      }

 }

 
}


借用一下二楼的代码
2018-05-21 17:52
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
得分:0 
N维是个虚拟的概念,任何数据在内存中排列都是线性排列
2018-05-21 17:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-487049-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018036 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved