关于冒泡排序算法有一些问题。

C语言初学者遇到问题,是关于冒泡法排序算法的。。_百度知道
C语言初学者遇到问题,是关于冒泡法排序算法的。。
b'n[A]从大到小
[B]从小到大\\%d&quot,i).0 一个给学生考试成绩排名的程序#include&} } for(i=1;;&& scanf(&=n-1; getchar();要给几个值排序;
printf(&i++)
printf(&quot!=') {MessageBox(NULL;a'} printf(&quot,TEXT(&||set=='
scanf(&%d &quot,j;)
for(j=1;i++)
if(score[i]&&#47&#47? &||set=='score[i]=score[i+1];score[i+1])
{temp=score[i]; n-j.h&goto reset,&quot,score[10000];n-j;j++)
for(i=0;=n,&score[i]),TEXT(& system(&TestRankPro V1;n请选择? &quot: printf(&quot!='&&%f;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=&#92,i;.h&j++)
for(i=0;%c&);i&} } if(set==')
for(j=1;;=n-1;=n;A'score[i+1]= scanf(&;pause&j&\B'请你输入正确的命令;n&),MB_ICONHAND););
if(set,&n);错误的值&%d号的成绩;B'b' } if(set=='&&A&#39!='a&#39,&set);i&lt:&quot!&score[i+1])
{temp=score[i];int main(){ #include&); getchar(); for(i=1,score[i])!='i++)
if(score[i]&score[i]=score[i+1];i& putchar('i++) {
printf(&score[i+1]=j&return 0;i&n'););;)
hiphotos.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http.baidu://e.hiphotos://e.baidu.jpg" esrc="http.baidu.hiphotos://e.com/zhidao/pic//zhidao/wh%3D600%2C800/sign=/zhidao/wh%3D450%2C600/sign=ff279d645aafa40f3c93c6d99e542f79/d058ccbf6cfa358b1f9<a href="http
提问者采纳
/i&lt,你引用了数组的第0个元素参与排序;
i 从第0个开始的
按上面初始化的规则来说 应该改为 for(i=1;j&/%f;n-j;=n,而最后你使用整型的 %d 输出的;i从1 开始的
此时 数组的第0个元素的值还是不确定的 {
printf(&j++)
for(i=0,i);n-j,排序是 会出现问题for(j=1已在你前面的问题中回答过了;=n;i++)
if(score[i]& 4;;=n-1;;、排序的时候、最后输出的时候;
scanf(&i&lt,&score[i+1]=i&/i++)
/&#47;for(i=1;score[i+1])
{temp=score[i],我在回答一下吧1,这里 会出现问题 ;%d &quot,因为 第0个元素值未初始化; }2;? &}下面的那个排序也是同样问题3,score[i])、初始化时你是从数组的 下标为 1 的元素开始的、最好不要在程序中使用
goto ,应该改为
for(i=1;i&%d号的成绩; 应该改为
printf(&quot,score[i]);i++)
printf(&quot,&score[i]);score[i]=score[i+1],你的数组定义的都是 float 类的,格式化符号使用有问题;
/%f &quot,这个一般是不建议使用的
提问者评价
其他类似问题
冒泡法的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于冒泡排序和选择排序(新手求助)_pascal吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:6,763贴子:
关于冒泡排序和选择排序(新手求助)收藏
第一部分 产生500个随机数Program p4_1(input,output);
const n=500;
assign(f,'data.out');
rewrite(f);
for i:=1 to n do
a:=random(1001);
write(f,a:5);
if i mod 10 =0 then writeln(f);
if a&=500 then s:=s+1;
write('&=500 :', s);
end. 第二部分 选择排序Program p4_2(input,output);
const n=500;
a:array[1..n]
assign(f1,'data.out');
reset(f1);
for i:=1 to n do read(f1,a[i]);
close(f1);
for i:=1 to n-1 do
for j:=i+1 to n do
if a[j]&a[p] then p:=j;
t:=a[i];a[i]:=a[p];a[p]:=t;
assign(f2,'datasort.out');
rewrite(f2);
for i:=1 to n do
write(f2,a[i]:5);
if i mod 10 =0 then writeln(f2);
close(f2);
end.第三部分 冒泡排序Program p4_3(input,output);const n=500;var
a:array[1..n]begin
assign(f1,'data.out');
reset(f1);
for i:=1 to n do read(f1,a[i]);
close(f1);
for i:=1 to n-1 do
for j:=n downto i+1 do
if a[j]&a[j-1] then
t:=a[j-1];
a[j-1]:=a[j];
assign(f2,'datasort.out');
rewrite(f2);
for i:=1 to n do
write(f2,a[i]:5);
if i mod 10=0 then writeln(f2);
close(f2);end.选择排序正确 冒泡排序出现错误 求指教。
冒泡输出结果
999 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000 00 00 00 1000
你应当用插入排序
请问冒泡排序为什么会出问题
请问冒泡排序为什么会出以上问题
谁叫你把N设成了500呢?pascal就是能傻乎乎地输出500个数了!?不信。。。数一数有几个数吧!
if 那里少个begin end
或者把begin移到 then 后面....这粗心的...
for i:=1 to n-1 dofor j:=n downto i+1 dobegin 【我说的是这个begin end】if a[j]&a[j-1] thent:=a[j-1];
【这样当不满足if时就也会执行下面两句赋值语句了】a[j-1]:=a[j];a[j]:=t;
for i:=1 to n-1 dofor j:=n downto i+1 dobeginif a[j]&a[j-1] thenbegint:=a[j-1];a[j-1]:=a[j];a[j]:=t;
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或关于用数组做冒泡排序的问题。几个FOR不太懂请高手指教。。。_c语言吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:271,347贴子:
关于用数组做冒泡排序的问题。几个FOR不太懂请高手指教。。。收藏
#include &stdio.h&#include &stdlib.h&main(){
int i,n,a[10],t;
for(i=0;i&10;i++)
scanf("%d",&a [i]);
for(i=0;i&9;i++)
for(n=i+1;n&10;n++)
if(a[i]&a[n])
a[i]=a[n];
for(i=0;i&10;i++)
printf("%d ",a[ i ]);
system("pause");}
第一个FOR我知道是控制输入数组a[i]的。那第二 三四个FOR个是限制什么的呀????????????????
好像是有一个是限制2个数交换位置的次数的。还有一个是限制要做几次排序的。
第三个FOR保证a【i】是最小的,第二个for把数组遍历一边第四个for输出排序后的数组
第一个是控制数组的输入 第二第三是冒泡排序 第四个是控制数组的输出
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或C++冒泡排序问题_百度知道
C++冒泡排序问题
;count-1;i&j&=i?;count-1-i;j++)}里面那个for有的地方是用自减的for(int j=count-1;j&j--)是一样的吗;i++){
for(int j=0.。就是其中两个for的循环for(int i=0?还有那个大于小于号后面的count什么时候要减1什么时候不减1啊 好烦啊那些无端端又减1又有时候不用减1
提问者采纳
jpg" esrc="http。因为数组的下标是从0开始的.jpg" />&nbsp://c;/zhidao/wh%3D450%2C600/sign=ceac59afd21b0ef46cbd905ae8f47dec/77c6a7efce1b9df3deb48f8d5464{3,&nbsp.baidu.a[cout]&nbsp://c。<img class="ikqb_img" src="=&/zhidao/pic/item/77c6a7efce1b9df3deb48f8d5464要减一.现在你的内存里就是按这样排列的;int&nbsp.baidu,&nbsp,1&int&=&cout&2}.从前向后和从后向前是没得区别的,如果不减一的话就可能去访问a[5]的地方造成错误访问(内存泄漏);1。2.先跟你说哈为什么要count&nbsp先给你举个实例吧
提问者评价
其他类似问题
冒泡排序的相关知识
其他1条回答
自己的排序习惯,是因它的排序的作比较的量的位置和排序的方向决定,看个人的编程习惯!!里面那个for有的地方是用自减的
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁关于C语言冒泡排序的问题_百度知道
关于C语言冒泡排序的问题
);n& i&姓名;; ++i) {
printf (&:%f&
printf (& j& ++i) {
for (j=0,p[i].name),p[i], int len){
p[j] = p[j+1];
} } ,i+1),i+1),t;第%d个学生&#92;;len-1-i,len); for (i=0.score);姓名,&p[i];}void Sort (struct Student * }
);第%d个学生的信息:&分数;
printf (&;.score),p[i]; scanf (& len-1; Output (p;n&quot:&#92; ++i) {
printf (&len,len); Input (p;void Input (struct Student *%f& i&lt.h&n&quot, int len){ int i.h&%s&struct Student{ char name[100]; Sort (p; p = (struct Student *)malloc(len * sizeof(struct Student));%d&
printf (& i&};
p[j+1] = t, int len){ int i.score &
scanf (&quot,j:%s&quot,len);printf (& struct Student *; ++j)
if (p[j],&len).score)
t = p[j];输入学生的个数&#92;
scanf (&);# include &}int main (void){
printf (&quot:& p[j+1]; for (i=0;}void Output (struct Student *len.name);分数; for (i=0请帮我看看这段代码错在哪要怎么改啊# include & return 0
我有更好的答案
p[j] = p[j+1];
p[j+1] = t,再去试试
t = p[j].score &/ ++i) {
for (j=0; for (i=0void Sort (struct Student * p,还有t应该是float型的; j&交换的时候还要交换姓名; ++j)
if (p[j];len-1-i.score)
{/ p[j+1], int len){ int i,j;len-1
谢谢你的回答,这个我已经知道错在哪了,谢谢你,应该把t的类型定义成struct Student类型就可以了,因为无法把struct Student p[j]赋值给int 型的t,所以应该改成:void Sort (struct Student * p, int len){int i,j;struct Sfor (i=0; i&len-1; ++i) {for (j=0; j&len-1-i; ++j)
{if (p[j].score & p[j+1].score)
{t = p[j];
p[j] = p[j+1];
其他类似问题
冒泡排序的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 冒泡排序算法 的文章

 

随机推荐