li1 发表于 2021-11-26 22:20:51

二维数组怎么实现㴘泡算法

#include<stdio.h>

int main()
{
    int a={{9,8,8,8,8,8},
                {8,9,5,5,5,5},
                {5,5,9,4,4,4},
                {4,4,4,9,2,2},
                {2,2,2,2,9,0},
                {0,0,0,0,0,9}};
    int i,j,t,c;

    for(t=0;t<35;t++)//全部比较1次需要35次才能比较完。
    {
      for(i=0;i<6;i++)
      {
            for(j=0;j<6;j++)
            {
                if(a>a)
                {
                  c=a;a=a;a=c;
                }

            }
      }
    }
    for(i=0;i<6;i++)
    {
      for(j=0;j<6;j++)
      {
            printf("%d ",a);
      }
      printf("\n");
    }
    return 0;

}
想问一下这个代码a与a怎么比较的。而且当j=5时j+1=6,他怎么不越界的。

傻眼貓咪 发表于 2021-11-26 22:34:53

其实已经越界,只是没有报错(越界不一定会报错,至于为什么,可以网路爬文,这里就不多做解说了)

举例:
#include <stdio.h>

int main()
{
    int arr = {75, 42, 61, 38, 5};
    printf("%d", arr); // 故意越界
    return 0;
}1387173203注:可以看得出,以上代码越界并没有报错。

傻眼貓咪 发表于 2021-11-26 22:48:15

你的代码中,所谓越界的 a 是用来储存待更换的值(代码:a = c)

jackz007 发表于 2021-11-26 22:54:42

      多维数组直接按一维数组处理就好了
#include<stdio.h>

int main(void)
{
    int a={{9,8,8,8,8,8},
                {8,9,5,5,5,5},
                {5,5,9,4,4,4},
                {4,4,4,9,2,2},
                {2,2,2,2,9,0},
                {0,0,0,0,0,9}} ;
    int * d , i , j , t      ;
    d = & a            ;
    for(i = 0 ; i < 35 ; i ++) {
            for(j = i + 1 ; j && d < d ; j --) {
                  t = d    ;
                  d = d ;
                  d = t      ;
            }
    }
    for(i = 0 ; i < 6 ; i ++)
    {
      for(j = 0 ; j < 6 ; j ++)
      {
            printf("%d " , a) ;
      }
      printf("\n")                ;
    }
    return 0                        ;

}
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
0 0 0 0 0 0
2 2 2 2 2 2
4 4 4 4 4 4
5 5 5 5 5 5
8 8 8 8 8 8
9 9 9 9 9 9

D:\00.Excise\C>   
页: [1]
查看完整版本: 二维数组怎么实现&#15640;泡算法