编程论坛's Archiver

cecilia 发表于 2008-7-21 22:58

[求助]初学者的一道题

任意输入100个数,从中挑选出10个最小数,并将这些数转换为16进制和2进制。
怎样做呢?要将100个数先排序吗?那如果是1000个数或者更多的话,运算起来是不是很麻烦呢?
求高人指教,并给出正确答案,谢谢!!!

carmen0531 发表于 2008-7-22 02:37

这种一般都要排序的,先用一个冒泡法排序从小到大拍,然后前十个就是了。进制转换就不用说了吧。

冒泡法:

    int *p,*q, a[],m;
    p=a;
   
for(int i=0;i<N;i++)
{
    if(*p>*q)
  {
    m=*p;
    *p=*q;
    *q=m;
  }
    p++;
    q=p++;
}


冒泡法大概就是这个样子的,很就没看书了,自己想的,可能跟书上的有点不一样,但意思应该是一样的。不信就拿我这个跟你老师去对一下。

cxhiou 发表于 2008-7-22 18:47

用冒泡的排序
太慢了
可以采用树的结构
效率快很多!

病书生 发表于 2008-7-22 23:09

数字低于5000个,用冒泡足够了

很二很弱智 发表于 2008-7-22 23:59

我记得冒泡法是这样的

int i,j,a[100],n,t;
for(i=1;i<=n-1;i++)
{for(j=i+1;j<=n;j++)
   if(a[i]>a[j])
   {t=a[i];a[i]=a[j];a[j]=t;
    }

leeco 发表于 2008-7-23 02:07

找出n个数中前k个小(大)数,我想到最快的算法是nlogk的.
我想你大概猜出来了吧,好吧,那我就不说了

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.