新手写的冒泡法算法,不懂为什么结果会这样,错的很离谱但不知道错在哪里
#include <stdio.h>void main()
{
int a={256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5};
int m,n,i;
for (m=0;m<=28;m++)
{
for(n=0;n<=28;n++)
{
if(a>a)
{
i=a ; a=a ;a=i ;
}
}
}
for (i=0;i<=29;i++)
{
printf("%5d",a);
}
} #include <stdio.h>
void main()
{
int a={256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5};
int m,n,i;
for (m=0;m<=28;m++)
{
for(n=0;n<=28;n++)
{
if(a>a)
{
i=a ; a=a ;a=i ;//这里错了" i=a ; a=a ;a=i ;"
}
}
}
for (i=0;i<=29;i++)
{
printf("%5d",a);
}
} i=a ; a=a ;a=i ;//低级错误 这是根据你的代码改的,改动的两处都做了注释~
#include <stdio.h>
void main()
{
int a = { 256, 165, 1651, 145, 15, 16515, 784, 8971, 18, 9, 49, 498, 498, 45, 445, 66, 22, 55, 4, 52, 2, 55, 6, 6, 44, 2, 2, 85, 5 };
int m, n, i;
for (m = 0; m <= 28; m++)
{
//for (n = 0; n <= 28; n++)
for (n = m; n <= 29; n++)//最大下标是29
{
if (a>a)
{
//i = a; a = a; a = i;
//这里应该交换a和a
i = a;
a = a;
a = i;
}
}
}
for (i = 0; i <= 29; i++)
{
printf("%5d", a);
}
} #include <iostream>
using namespace std;
void main()
{
int a = { 256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5 };
int m, n, i;
for (m = 0; m < 29; m++)
for (n = 0; n <29 - m; n++)
if (a>a)
{
i = a; a = a; a = i;
}
for (i = 0; i <= 29; i++)
{
cout << a << ',';
}
//仔细看代码!!!!!!! #include <iostream>
using namespace std;
void main()
{
int a = { 256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5 };
int m, n, i;
for (m = 0; m < 29; m++)
for (n = 0; n <29 - m; n++)
if (a>a)
{
i = a; a = a; a = i;
}
for (i = 0; i <= 29; i++)
{
cout << a << ',';
}
for嵌套循环啊 for嵌套的循环是冒泡的精华啊 括号晕掉了 for嵌套循环和三个变量值转换经典啊 #include <stdio.h>
intmain()
{
int a={256,165,1651,145,15,16515,784,8971,18,9,49,498,498,45,445,66,22,55,4,52,2,55,6,6,44,2,2,85,5};
int m,n,i;
for (m=0;m<=28;m++)
{
for(n=0;n<=28;n++)
{
if(a>a)
{
i=a ;
a=a;
a=i ; //
}
}
}
for (i=0;i<=28;i++)
{
printf("%5d\n",a);
}
return 0;
}
这样才对吧 楼上大神已经解决了,我把我自己写的排序也贴出来{:10_256:}
int a={2,15,5,4,1};
int t=0;//比较的时候互换的时候的临时值
//开始遍历
for(int i=0;i<5-1;i++){
for(int j=0;j<5-i-1;j++){
if(a>a){
//完成置换
t=a;
a=a;
a=t;
}
}
}
for(int i=0;i<5;i++){
printf("%d ",a);
} 第12行a=i错了
第8行for(n=0;n<=28;n++)判断条件应该是 n<=29-m
第一个属于低级失误
第二个错不知道是你笔误,还是没有真的理解冒泡排序,如果不知道为什么这样写,建议你还是百度去看一下冒泡排序的过程和原理
还有程序出了问题要学会自己debug,用编程软件里面的调试功能,一步一步的执行代码,可以添加查看,把每一步各个变量的值都显示出来,这样也有助于你自己发现问题。 可以用sort()函数排序。 a只有29个数字啊
页:
[1]