首 页 行业热点 新车 试驾评测 养车用车 车型库

C语言数组中如何挑选第n大的值

发布网友 发布时间:2022-04-22 18:09

我来回答

5个回答

热心网友 时间:2023-06-30 16:33

在函数中利用动态数组复制原数组,并生成一个下标数组与复制数组相对应

对复制后的数组进行冒泡排序n次,冒泡的同时对下标数组进行相应的操作,保证这两个数组的对应关系

第n次冒泡就可以从下标数组得到所需的位置信息了。

也可以参考下面这段代码,写了这么多,请采纳吧。

int findN(int arr[], int m, int n){
int *index = (int *)malloc(n*sizeof(int));
bool flag=0;
int i,j;

for (i=0; i<n; i++)
{
index[i] = 0;
for (j=0; j<m; j++)
{
if (arr[index[i]]<=arr[j])
{
for (int k=0; k<i+1; k++)
{
if (j==index[k])
{
flag = 1;
break;
}
}
if (!flag)
{
index[i] = j;
}
else
{
flag = 0;
continue;
}
}
}
}
int tmp = index[n-1];
free(index);
return tmp;
}

int main()
{
int a[5] = {-1, 3, 2 ,0,-3};
int n=1;
printf("数组为:\n");
for (int i=0; i<5; i++)
{
printf("%d  ", a[i]);
}
printf("\n");

printf("请输入n:\n");
scanf("%d", &n);
printf("\n");

printf("第%d大的元素下标为: %d ",n,findN(a,5,n));
printf("\n");
}

热心网友 时间:2023-06-30 16:34

int iArry1[m] = { 0 };
//do sth to stuff iArry1 here;

//将iArry1排序,
int nMax = iArry1[0];nMin= iArry1[0];
int nMaxIndex = 0; 
for(int i = 0; i < m; i++)
{
    if(iArry1[i] > nMax)
    { 
        nMax = iArry1[i];
        nMaxIndex = i; 
     }
    if(iArry[i] < nMin)
    {
        nMin = = iArry1[i];
    }
}

iArry1[nMaxIndex] = nMin - 1;   
for(int i = 1; i < n; i++)

    nMax = iArry1[0];
    nMaxIndex = 0;  
    for(int j = 0; j < m; j++)
        {
            if(iArry1[j] > nMax)
            { 
                nMax = iArry1[j]; 
                nMaxIndex = j;  
            }  
         }  
    iArry1[nMaxIndex] = nMin - 1;     
}
printf("第%d大的数字为:%d",n,nMax);

 以上代码没有考虑数字相同情况,并且没有对m,n等做检查,随手写的,就是说了下想法,具体是否有错误还需自行调试。

热心网友 时间:2023-06-30 16:34

先排序
遍历数组 如果 a[i] != [i-1] n--
当 n ==1 时 此时数组下标即为所求值

热心网友 时间:2023-06-30 16:35

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int m_n_s(int *p,int m,int n){
int a[100],i,j,k,x;
memcpy(a,p,m*(x=sizeof(int)));
for(k=(1<<x*8)-1;n;n--){
for(x=a[0],i=1;i<m;i++)
if(a[i]>x) x=a[j=i];
a[j]=k;
}
return j;
}
void main(void){
int a[100],n,i,j,k;
printf("Enter some data...\n");
for(i=0;i<100;i++)
if(scanf("%d",a+i)!=1)
break;
printf("Type n(n<%d)...\nn=",i);
fflush(stdin);
scanf("%d",&n);
printf("第%d大的下标是%d\n",n,m_n_s(a,i,n));
}

热心网友 时间:2023-06-30 16:35

从小到大排序,输出第n个元素

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com