免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1659 | 回复: 9
打印 上一主题 下一主题

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-02-27 11:08 |只看该作者 |倒序浏览

  1. #include "ostream.h"
  2. #include "istream.h"
  3. void main()
  4. {
  5.         int a[]={10,9,21,4,56};
  6.         int len=sizeof(a)/sizeof(int);
  7.         int i,m;
  8.        
  9.         for(i=0;i<len-1;i++)
  10.         {
  11.                
  12.                 for(m=m+1+i;m<len;m++)
  13.                 {
  14.                         if(a[i]>;a[m])
  15.                         {
  16.                                 int temp;
  17.                                 temp=a[i];
  18.                                 a[i]=a[m];
  19.                                 a[m]=temp;
  20.                                 continue;
  21.                         }       
  22.                 }
  23.         }
  24.         for(i=0;i<len;i++)
  25.         {
  26.                 cout<<a[i]<<endl;
  27.         }
  28.        
  29. }
复制代码

对这个数组按长序排列,思路是:第一个数与数组中的其它数比较,然后第二个数与后面的数比较,依次类推。
可输出的是4,9,21,10,56
不知道问题出在哪里?

论坛徽章:
0
2 [报告]
发表于 2003-02-27 11:35 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

第一个循环那里
应该是i<len
吧,为什么会是i< len-1

论坛徽章:
0
3 [报告]
发表于 2003-02-27 11:39 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)


for(m=m+1+i;m<len;m++)
中m=m+1+i改为m=i+1

应该就可以了

论坛徽章:
0
4 [报告]
发表于 2003-02-27 11:42 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

sizeof(a)是返回的该数组字节数,len在这里代表的是数组中元素的个数,不是这个地方的错。

论坛徽章:
0
5 [报告]
发表于 2003-02-27 11:44 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

原帖由 "unicorns" 发表:
第一个循环那里
应该是i<len
吧,为什么会是i< len-1

当i=4的时候m=5,a[5]超出了数组的界限

论坛徽章:
0
6 [报告]
发表于 2003-02-27 11:47 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

原帖由 "zlzj2010" 发表:

for(m=m+1+i;m<len;m++)
中m=m+1+i改为m=i+1

应该就可以了

多谢,就是这个地方多写了一个m.

论坛徽章:
0
7 [报告]
发表于 2003-02-27 11:50 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

原帖由 "zlzj2010" 发表:

for(m=m+1+i;m<len;m++)
中m=m+1+i改为m=i+1

应该就可以了


是肯定可以了!

论坛徽章:
0
8 [报告]
发表于 2003-02-27 14:40 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

我觉得搂主的代码有两点不足:
1. 第二个for循环的:m = m + i + 1 改为:m = i +1;
2. continue 这条语句完全多余,可以不要。

论坛徽章:
0
9 [报告]
发表于 2003-02-27 15:56 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

原帖由 "zhuxa" 发表:
我觉得搂主的代码有两点不足:
1. 第二个for循环的:m = m + i + 1 改为:m = i +1;
2. continue 这条语句完全多余,可以不要。

是这样的,不过现在已经把它们都删掉了.
谢谢!

论坛徽章:
0
10 [报告]
发表于 2003-02-27 16:16 |只看该作者

我是实在找不出问题在哪里,请帮忙看一下.(关于数组排序)

我的程序你可以借鉴一下:
      //核心的程序段
     //从大到小排列
       for(i=0;i<len-1;i++){
            max=i;//先假设第i个元素是最大的
             for(m=i+1;m<len;m++){
                if(a[m]>;a[max]) ;
                max=m;
              }   
             if(i!=max){
               int temp;
               temp=a;
               a=a[max];
               a[max]=temp;
              }
          }
          //从小到大可以模仿此法
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP