一维数组内部要求有序,如何找出最大的n个值。不能用排序法,下面说明
诚求大神的帮助:急需帮忙,不胜感激!c语言中,一维数组内部要求有序,如何找出其中最大的n个值。
也就是一位数组的下标是有意义的,所以不可以通过排序来实现。
比如说找到最大的3个值是:a[3],a[8],a[22]
[此贴子已经被作者于2016-5-27 23:56编辑过]
[此贴子已经被作者于2016-5-27 23:56编辑过]
2016-05-27 23:39
变来变去还是只会用排序的方法,可是这样一来就得不到数组的下标值了。新手,希望大神们提供一些指导
2016-05-27 23:54
2016-05-28 08:13

2016-05-28 09:12
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{
int m=10, n=3;
int a[m], ai[m], tmp;
srand((unsigned)time(0));
for (int i=0; i<m; i++)
{
a[i] = rand()%m + 1;
ai[i] = i;
}
for (int i=0; i<m; i++)
{
for (int j=i+1; j<m; j++)
{
if (a[ai[j]] > a[ai[i]])
{
tmp = ai[i];
ai[i] = ai[j];
ai[j] = tmp;
}
}
}
printf("a[]=%d", a[0]);
for (int i=1; i<m; i++) printf(",%d", a[i]);
printf("\n在%d个数中取%d个最大的数\n", m, n);
for (int i=0; i<n; i++) printf("a[%d]=%d\n", ai[i], a[ai[i]]);
}
2016-05-28 14:59
2016-05-28 22:13
2016-05-28 22:21
2016-05-28 22:26
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int m=10, n=3,i,j,k,min;
int a[10];
srand((unsigned)time(0));
for (i=0; i<m; i++)
{
a[i] = rand()%m + 1;
if(!i)
{
min=a[i];
printf("a[]=");
}
if(a[i]<min)min=a[i]; //获取最小的数
printf("%3d",a[i]);
}
printf("\n");
for(i=0;i<n;i++)
{
k=0;
for(j=0;j<m;j++)if(a[j]>a[k])k=j;;
printf("a[%d]=%d\n",k,a[k]);
a[k]=min-a[k];
}
//这里可再加一个还原数据的循环,将小于min的数再做一次min-的操作即可还原
}

2016-05-28 23:28
2016-05-30 09:01