二维数组怎么实现㴘泡算法
#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,他怎么不越界的。 其实已经越界,只是没有报错(越界不一定会报错,至于为什么,可以网路爬文,这里就不多做解说了)
举例:
#include <stdio.h>
int main()
{
int arr = {75, 42, 61, 38, 5};
printf("%d", arr); // 故意越界
return 0;
}1387173203注:可以看得出,以上代码越界并没有报错。 你的代码中,所谓越界的 a 是用来储存待更换的值(代码:a = c) 多维数组直接按一维数组处理就好了
#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]