Skip to content
c
#include <stdio.h>
#include <string.h>

// 标记法
void topK(int arr[],int n,int k)
{
    int mark[n];
    for(int l=0;l<n;l++)
    {
        mark[l]=0;
    }
    for(int m=0;m<k;m++)
    {
        int max=0;
        int index=-1;
        for(int i=0;i<n;i++)
        {
            if(mark[i]==0 && arr[i]>max)
            {
                max=arr[i];
                index=i;
            }
        }
        if(index!=-1)
        {
            mark[index]=1;
        }
    }

    for(int i=n-1;i>=0;i--)
    {
        if(mark[i]==1)
            printf("%d",arr[i]);
    }
}

int main() {
    int arr[]={4,0,3,1,2,7};
    int k=3;
    topK(arr,sizeof(arr)/sizeof(arr[0]),k);
}

双数组标记法,每次标记一个最大值,后续比较不比较被标记的值