一维数组内部要求有序,如何找出最大的n个值。不能用排序法,下面说明
诚求大神的帮助:急需帮忙,不胜感激!c语言中,一维数组内部要求有序,如何找出其中最大的n个值。
也就是一位数组的下标是有意义的,所以不可以通过排序来实现。
比如说找到最大的3个值是:a[3],a[8],a[22]
[此贴子已经被作者于2016-5-27 23:56编辑过]
#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]]); }
#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-的操作即可还原 }