C语言冒泡排序的问题

冒泡排序今设n=10,定义数组长度为11,本例中对a[0]不用,只用a[1]到a[10],以符合人们习惯main(){inta[11];inti,j,t;printf(“... 冒泡排序
今设n=10,定义数组长度为11,本例中对a[0]不用,只用a[1]到a[10],以符合人们习惯
main()
{
int a[11];
int i,j,t;
printf(“input 10 numbers :\n”);
for(i=1;i<11;i++)
scanf(“%d”,&a[i]);
printf(“\n”);
for(j=1;j<9;i++)
for(i=1;i<=10;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf(“the sorted numbers :\n”);
for(i=1;i<11;i++)
printf(“%d”,a[i]);
}

运行情况如下:
Input 10 numbers:
1 0 4 8 12 65 -76 100 -45 123
the sorted numbers
-76 -45 0 1 4 8 12 65 100 123

我想知道每一行代码的意思,也就是讲解,越详细越好,因为我要用来演讲,所以希望用词精准一些详细一些,谢谢各位大侠帮忙了!答案满意会高分赠送的!谢谢!
展开
 我来答
我欲弑神
2008-07-18 · TA获得超过912个赞
知道小有建树答主
回答量:1247
采纳率:0%
帮助的人:1025万
展开全部
关键就是这行了哈 我就给你讲讲这几行
for(j=1;j<9;i++)
for(i=1;i<=10;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
这里 实现的是。。每当。。发现一个数值比前面的小。哪么他就前移一位。。从第一位开始。。。一步一步来。。。每当遇到小的就前移。
好 第一个循环。。(j=1到j=2之间算1个循环)把最大的排到了最后一位。。而第二次循环。把倒数第二大的排到了倒数第二位。。就这样慢慢的经过10次循环后就把这一组数重排了。。。。。

其实最好的排序算法还是背包算法比较好点。。
玉琲By
2008-07-18 · TA获得超过1096个赞
知道小有建树答主
回答量:2343
采纳率:0%
帮助的人:1232万
展开全部
每一行没什么意思,算法的关键是思想
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
scsnxuyuan
2008-07-18 · TA获得超过616个赞
知道小有建树答主
回答量:478
采纳率:0%
帮助的人:299万
展开全部
看错错了,不回答了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
love7mlove
2008-07-18 · 超过23用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:0
展开全部
821449239
我QQ号,我可以给你语音讲,写太麻烦了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2008-07-18
展开全部
就是给别人讲 也要先把程序写对啊
#include<stdio.h>
void main()
{
int a[11];
int i,j,t;
printf("input 10 numbers :\n");
for(i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<10;j++)
for(i=1;i<11-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("the sorted numbers :\n");
for(i=1;i<11;i++)
printf("%d ",a[i]);
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
447551000
2008-07-19 · TA获得超过102个赞
知道答主
回答量:68
采纳率:0%
帮助的人:0
展开全部
要想学好它,首先你要把程序写对
#include<stdio.h>
void main()
{
int a[11]; //定义一个长为11的数组
int i,j,t;
printf("input 11 numbers :\n");
for(i=1;i<=11;i++) //循环由键盘输入任意11个数
{
scanf("%d",&a[i]);
}

for(j=1;j<=9;j++)//外部循环
{
for(i=1;i<=10;i++) //内部循环
{
if(a[i]>a[i+1]) //做判断比较并交换位置
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
printf("the sorted numbers :\n");
//把它正确的顺序循环打印出来
for(i=1;i<=11;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
其实你的程序有点浪费资源,你这个是升序排列,如果有人输入的就是一个升序排列,其实不必循环,但你写的同样要循环那么多次,但是像这样就不会了,加一个bool 变量来判断它是否已排好,不必多做循环
#include<stdio.h>
void main()
{
int a[11];
int i,j,t;
bool nExChange=false;

printf("input 10 numbers :\n");
for(i=1;i<=11;i++)
{
scanf("%d",&a[i]);
}

for(j=1;j<=9;j++)
{
nExChange=false;
for(i=1;i<=10;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
nExChange=true;
}
}
if (nExChange==false)
{
break;
}
}

printf("the sorted numbers :\n");
for(i=1;i<=11;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式