如题,加入有整型数组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[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;
}追问
#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];
}追问
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];
}追问
是个解决办法,但是如果不允许对原数组进行排序呢?
追答那就再定义一个数组 将原数组的值全都导到里面 再对新的数组排序