| 
 | 
 
 
发表于 2015-9-16 15:58:42
|
显示全部楼层
 
 
 
 本帖最后由 yywryywr 于 2015-9-16 16:08 编辑  
 
 
这是冒泡排序??? 
首先逻辑就错了,比如  1 2 3这三个数,在里面比较的时候是这样的: 
 
我们看代码的第一次内层循环是怎么执行的 
首先 1和2比,不交换(按LZ的代码来)( 这时j=0) 
然后j++,2和3比,不交换(这时j=1) 
然后再j++ ,j=2,跳出循环 
此时k=a[ ,i ][j] == a[,i,][1]==2 ,(是的,j这个时候是1哦,不是0 ) 
 
所以LZ的代码结果应该是2,5,8 
 
列外冒泡排序是种方法,到底小的数放前面还是放后面还不是看自己喜欢和需求 
下面是我改的LZ的代码,供参考 
 
- #include<stdio.h>
 
 - void main()
 
 - {
 
 -         int c[5];
 
 -         int i,j,k;
 
 -         int temp=0;//temp用来存放目前已知的最小的值
 
 -         int a[3][3]={1,2,3,4,5,6,7,8,9};        
 
  
-         for(i=0;i<3;i++)//求矩阵中每行的最小数
 
 -         {
 
 -                 for(j=0;j<2;j++)
 
 -                 {
 
 -                         for (k=j+1;k<3;k++)
 
 -                         {
 
 -                                 if (a[i][j]>a[i][k])
 
 -                                 {
 
 -                                         temp=a[i][k];
 
 -                                         a[i][k]=a[i][j];
 
 -                                         a[i][j]=temp;//把最小的值放到a[i][j]
 
 -                                 }
 
 -                         }
 
  
-                 }
 
 -                 c[i]=a[i][0];//这里不是a[i][j],因为循环完毕后j
 
 -         }
 
 -         for(i=0;i<3;i++)//输出数组c
 
 -         {
 
 -                 printf("%d\n",c[i]);
 
 -         }
 
 - }
 
  复制代码 
 
冒泡排序的三种方法,也共参考 
http://www.jb51.net/article/42052.htm 
 
最后,LZ不要省空间,真是好难看懂 |   
 
 
 
 |