C语言找出数组arr中元素的第k大的值

题目描述:编写一个函数getMaxK(intarr[],intn,intk,int*km),该函数用于找出数组
arr中元素的第k大的值,并将值存于km所指的变量中。在main函数中,输入n个整数
和k,调用函数getMaxK,输出n个整数序列中第k大的值。
如图所示

img

img

第k大,用选择排序的第k趟排序得到的最大值就是

#include <stdio.h>
void getMaxK(int *a,int n,int k,int *km)
{
    int i,j,m,t;
    for(i=0;i<n-1;i++)
    {
        m = i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]>a[m])
                m = j;
        }
        if(m!=i)
        {
            if(k==i+1)
            {
                *km = a[m];
                break;
            }
            else
            {
                t = a[m];
                a[m] = a[i];
                a[i] = t;
            }
        }
    }
}

int main(){

    int i,j,n,k,a[100],km=0;
    scanf("%d%d",&n,&k);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    getMaxK(a,n,k,&km);
    printf("%d",km);
    return 0;
}

对数组排好序,k-1位置下的就是要寻找的值。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632