当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 15 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-13 18:59 
头像

注册: 2008-04-09 11:01
帖子: 153
送出感谢: 0 次
接收感谢: 0 次
望各位路过的能停留1分钟看看我的小小小程序。。。

代码:
//创建一个数组,然后分别利用选择法和冒泡法对数组进行排序。

#include <stdio.h>

#define NUMBER 10

void xuanzefa(int a[],int n);
void maopaofa(int a[],int n);

main()
{
   int a[NUMBER],i;
   
   printf("Please enter the number of the shuzu:\n");
   for(i=0;i<NUMBER;i++)
      scanf("%d",&a[i]);

   xuanzefa(a,NUMBER);
   printf("xuzefa->:\n");
   for(i=0;i<NUMBER;i++)
      printf("%d\t",a[i]);

   maopaofa(a,NUMBER);
   printf("\nmaopaofa->:\n");
   for(i=0;i<NUMBER;i++)
      printf("%d\t",a[i]);

   printf("\n");
   return 0;
}

void xuanzefa(int a[],int n)
{
   int temp,i,j,k;

   for(i=0;i<n-1;i++)
   {
      k=i;
      for(j=i+1;j<n;j++)
         if(a[j] < a[k])      k=j;
      if(k != i)
      {   temp=a[i]; a[i] = a[k];a[k] = temp;}
   }
}

void maopaofa(int a[],int n)
{
   int temp,i,j;
   for(i=0;i<n;i++)
   {   for(j=0;j<n-i;j++)
         if(a[j] <a[j+1])
            {temp=a[j]; a[j] = a[j+1];a[j+1] = temp;}
   }
}


希望大家给我看看,我每次运行如果输入一般的数都没有问题,但是每当输入1这个数的时候1会自动变为10。为什么呢? :em01
谢谢。。。。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-13 19:05 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
没有啊


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-15 18:23 

注册: 2009-01-30 21:29
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
你这冒泡写的有点太繁琐了...
我给你个pascal版的吧...
原来学竞赛的时候写的...应该问题不大...

for i:=1 to n do //n个数
for j:=1 to n do
if a[i]>a[j] then
begin
temp:=a[i]; //temp是临时变量
a[i]:=a[j];
a[j]:=temp;
end;


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-15 18:24 

注册: 2009-01-30 21:29
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
对了顺便说一下...
感觉你的问题在#define NUMBER 10上...
只是感觉...第一眼看这句就有很不顺的感觉...


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-15 18:35 
头像

注册: 2007-04-06 10:24
帖子: 2487
地址: ~/Shanghai
送出感谢: 0 次
接收感谢: 0 次
SethVerlo 写道:
对了顺便说一下...
感觉你的问题在#define NUMBER 10上...
只是感觉...第一眼看这句就有很不顺的感觉...


很敏锐的洞察力

虽然我也没看程序


_________________
http://silenceisdefeat.com/~greco
代码:
''.join([chr(ord(c)-2) for c in 'O{"G/ockn"ku<"itgeq0ujkBiockn0eqo'])
echo -n "Z3JlY28uc2hpQGdtYWlsLmNvbQ==" | base64 -d


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-16 13:10 
头像

注册: 2008-04-09 11:01
帖子: 153
送出感谢: 0 次
接收感谢: 0 次
先谢谢您的回复。。。
SethVerlo 写道:
你这冒泡写的有点太繁琐了...
我给你个pascal版的吧...
原来学竞赛的时候写的...应该问题不大...

for i:=1 to n do //n个数
for j:=1 to n do
if a[i]>a[j] then
begin
temp:=a[i]; //temp是临时变量
a[i]:=a[j];
a[j]:=temp;
end;


小弟刚刚出道,不大清楚你的“pascal”什么东东,(刚刚查了:“IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计语言之一, NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。 ”感觉你好牛,竟然可以参加这种比赛)。可是是说的看到我的“#define NUMBER 10”有问题,什么问题呢?我实在是感觉不出来,有什么不对的那我的选择法还是可以正常运行的啊。还有二楼,我是在Ubuntu下用gcc -o data data.c编译运行的,到现在还是不可以,难道是我的电脑的事,应该不是吧。

还可以帮我一下么???


最后由 timebomb 编辑于 2009-03-21 14:55,总共编辑了 1 次

页首
 用户资料  
 
7 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-16 13:55 

注册: 2008-01-28 15:54
帖子: 9
送出感谢: 0 次
接收感谢: 0 次
在VC和GCC下分别测试了LZ的代码,并没有碰到LZ的问题……


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-17 7:25 
头像

注册: 2008-04-09 11:01
帖子: 153
送出感谢: 0 次
接收感谢: 0 次
回去我再把文件放到其他的文件夹运行下试试,咋会这样呢,我找过一个编程msn好友,他第一次运行的时候也是出现了我的情况,但是改天自己又运行了几次竟然刚开始还是1变10.后来却又好了。奇怪了。。。呵呵,

先谢谢各位 :em11


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-17 9:44 
头像

注册: 2009-01-23 13:35
帖子: 88
地址: 武汉
送出感谢: 0 次
接收感谢: 0 次
timebomb 写道:
我是在Ubuntu下用gcc -o data.c data编译运行的,到现在还是不可以,难道是我的电脑的事,应该不是吧。

还可以帮我一下么???

好像是gcc data.c -o data 吧 :em11


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-17 12:24 
头像

注册: 2008-04-09 11:01
帖子: 153
送出感谢: 0 次
接收感谢: 0 次
wuqi 写道:
timebomb 写道:
我是在Ubuntu下用gcc -o data.c data编译运行的,到现在还是不可以,难道是我的电脑的事,应该不是吧。

还可以帮我一下么???

好像是gcc data.c -o data 吧 :em11



这个无所谓的,效果都是一样的 :em11


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-17 12:28 
头像

注册: 2008-04-09 11:01
帖子: 153
送出感谢: 0 次
接收感谢: 0 次
qakito 写道:
在VC和GCC下分别测试了LZ的代码,并没有碰到LZ的问题……



我把它放到别的新文件夹运行还是不行呢 :em20
还是出现老问题,只要输入1,那么冒泡法就会变成10。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-17 13:47 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
引用:
$ ./a.out
Please enter the number of the shuzu:
4 2 1 4 0 2 3 1 4 9
xuzefa->:
0 1 1 2 2 3 4 4 4 9
maopaofa->:
9 4 4 4 3 2 2 1 1 0


完全没有 LZ 所说的情况


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-21 13:39 
头像

注册: 2008-12-05 20:43
帖子: 97
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
哈哈 搂住打字时错了 我反复实验 发现问题出在冒泡法上:在第二重FOR循环时 for (j=0;j<n-i;j++) !!!里面的i-1因该是n-1!!该过来就好了。。。
另外闲暇之余,我按照timebomb同学所说 gcc -o ab.c ab //我的文件名是ab.c 并且当前目录下有 编译好ab 和 ab.c两个文件
结果是 没编译出来反而把我的 ab.c给删除了,ab没变还是上一次的ab ,,郁闷中 。。下面是代码 大家给分析下
代码:
ab: In function `_start':
(.text+0x0): multiple definition of `_start'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.text+0x0): first defined here
ab:(.rodata+0x0): multiple definition of `_fp_hw'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.rodata+0x0): first defined here
ab: In function `_fini':
/build/buildd/glibc-2.8~20080505/build-tree/glibc-20080505/csu/../sysdeps/generic/initfini.c:109: multiple definition of `_fini'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o:/build/buildd/glibc-2.8~20080505/build-tree/glibc-20080505/csu/../sysdeps/generic/initfini.c:109: first defined here
ab:(.rodata+0x4): multiple definition of `_IO_stdin_used'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.rodata.cst4+0x0): first defined here
ab: In function `__data_start':
(.data+0x0): multiple definition of `__data_start'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o:(.data+0x0): first defined here
ab: In function `__data_start':
(.data+0x4): multiple definition of `__dso_handle'
/usr/lib/gcc/i486-linux-gnu/4.3.2/crtbegin.o:(.data+0x0): first defined here
ab: In function `_init':
/build/buildd/glibc-2.8~20080505/build-tree/i386-libc/csu/crti.S:15: multiple definition of `_init'
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crti.o:/build/buildd/glibc-2.8~20080505/build-tree/i386-libc/csu/crti.S:15: first defined here
/usr/lib/gcc/i486-linux-gnu/4.3.2/crtend.o:(.dtors+0x0): multiple definition of `__DTOR_END__'
ab:(.dtors+0x4): first defined here
collect2: ld 返回 1


_________________
道是何物,直教,生死相许?


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-21 15:36 
头像

注册: 2008-04-09 11:01
帖子: 153
送出感谢: 0 次
接收感谢: 0 次
tianyaqu 写道:
哈哈 搂住打字时错了 我反复实验 发现问题出在冒泡法上:在第二重FOR循环时 for (j=0;j<n-i;j++) !!!里面的i-1因该是n-1!!该过来就好了。。。
另外闲暇之余,我按照timebomb同学所说 gcc -o ab.c ab //我的文件名是ab.c 并且当前目录下有 编译好ab 和 ab.c两个文件
结果是 没编译出来反而把我的 ab.c给删除了,ab没变还是上一次的ab ,,郁闷中 。。下面是代码 大家给分析下


谢谢这位兄弟,实在是感谢。呵呵。找到原因了。。。 :em11
1、我的冒泡法确实存在问题,而且是第二重for循环里面。应该是for (j=0;j<n-i-1;j++) ,因为第一次进入第二重for循环一直到j=8,交换a[8]a[9]后进入下一个循环就会出现非法的a[10]!因为我的循环允许j=9,当j=9再比较的时候就有了j+1=10。问题就是出现了数组溢出的现象。如果改成楼上所说的,倒是也可以找到正确的答案,但是违背了冒泡法的初衷,就是每一次二重for循环都要运行9次,这是没有必要的,因为毕竟你后面的已经排好了。如果数据多的话会浪费资源的。

2、楼上说的gcc -o ab.c ab 是我的疏忽,我在上面已经改正过来了。因为看的一个教程说是这样书写也是对的,但是我打错了。应该是gcc -o ab ab.c前面是你要编译成的文件名,后面是你要编译的文件名。

3、再次向上面的同志表示感谢。谢谢大家……


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 我的冒泡法怎么会1变10呢?
帖子发表于 : 2009-03-22 17:22 
头像

注册: 2008-12-05 20:43
帖子: 97
地址: 深圳
送出感谢: 0 次
接收感谢: 0 次
哈哈 我是新手哦 相互学习哈


_________________
道是何物,直教,生死相许?


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 15 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Yahoo [Bot] 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译