用C++实现找出数组中最大的几个数?

如题,加入有整型数组a[100],已经初始化为有效的值,编写算法找出其中最大的十个数,放在数组b[10]中,该如何实现?

第1个回答  2013-06-08
for (int i = 0; i < 10; ++ i) //将a[0-9]赋值给b[0-9]
{
b[i] = a[i];
}
for (int i = 0; i < 10; ++ i) //将b[]从小到大排序
{
for (int j = i+1; j < 10; ++j)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int i = 10; i < 100; ++i)
{
for (int j = 0; j < 10; ++ j)
{
if (a[i] > b[j])
{
b[j] = a[i];
break;
}
}
}追问

发现几个问题,第二个循环对b进行排序,怎么对a排序了,如果对a排序就不符合原始数组a[100]不动的原则了。

第2个回答  推荐于2016-10-06
试试,为了省事,a[i]都是用套用式子赋值的,没有手动

#include<stdio.h>
int main(void)
{
int a[100],b[10],i,j,t;
for(i=0,j=0;i<100;i++)
{
a[i]=i-j*2;
j=a[i]%20;
}
for(i=0;i<100;i++)
printf("%3d ",a[i]);

/*******************/
for(i=0;i<10;i++)
{
for(j=i+1;j<100;j++)
if(a[i]<a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
b[i]=a[i];
}

printf("\n*******输出最大的十个数******\n");
for(i=0;i<10;i++)
printf("%3d ",b[i]);
return 0;
}追问

你好像跟楼上的方法一样,先对原数组进行排序,再一次输出前几项。如果不允许修改原数组呢?

追答

是的,一样,都是对原数组直接择排序,然后取前10项
最简单的办法是用副本数组,就是再定义一个a1[100]
for(i=0;i<100;i++)a1[i]=a[i];
不改变原数组,对副本操做

追问

哥们帮忙想个不使用额外辅助数组,也不动原数组的查找方法,谢了。

追答

不加辐助数组实在没想出什么办法来,我改了一下,可是如果有两个变量相同就出错了
for(i=0;i<10;i++)
{
b[i]=a[0];

for(j=0;j<100;j++)
if(b[i]<a[j])
{
if(i==0)
b[i]=a[j];
else
if(a[j]<b[i-1])
b[i]=a[j];
}
}

本回答被提问者采纳
第3个回答  2013-06-06
先将数组a进行从大到小排序,再取前十个用for语句赋值到b数组中 用冒泡法
int b[10];
int temp;
for(int i=0; i<100; i++)
{

for(int j=0;j<100-i; j++)

{

if(a[j]<a[j+1])

{
temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}
}
}
for(int i=0;i<10;i++)
{
b[i]=a[i];

}追问

是个解决办法,但是如果不允许对原数组进行排序呢?

追答

那就再定义一个数组 将原数组的值全都导到里面 再对新的数组排序

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网