任意输入n个数,求第k大的数?用C语言,写出完整代码。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了任意输入n个数,求第k大的数?用C语言,写出完整代码。相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
int main()
int a[10000];
int n,temp,i,k,j;
printf("请输入你要输入的数的个数n:\n");
scanf("%d",&n);
for(i=0;i<n;i++)
printf("a[%d]=",i);
scanf("%d",&a[i]);

for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
if(a[j]<a[i])
temp=a[j];
a[j]=a[i];
a[i]=temp;



printf("请输入你要的到第几小/大的数K:\n");
scanf("%d",&k);
printf("第%d大的数为%d\n",k,a[k-1]);
printf("第%d小的数为%d\n",k,a[n-k]);
return 0;
参考技术A

#include "iostream"
#include "stdlib.h"
using namespace std;

int random_partion(int *p, int n)

int idx=rand()%n;
swap(p[idx], p[n-1]);
int i=-1;    //i????????p[n-1]??????
int j=0;     //j??????
for(j=0; j<n; j++)

//???p[n-1]?????????
if(p[j]<p[n-1])

swap(p[++i], p[j]);


swap(p[++i], p[n-1]);
return i;


int getMaxK(int *p, int n, int k)

int mid;
if(k<=0)
return -1;
if(n<k)
return -1;
mid=random_partion(p, n);   //??????????
if(mid == n-k)      //??mid==n-k,??????,????k???
return p[mid];
else if(mid<n-k)
return getMaxK(p+mid+1, n-mid-1, k);  //??mid<n-k,???k????????,??????k??
else
return getMaxK(p, mid, k-(n-mid));   //??mid>n-k,???k????????,?????????k-(n-mid)???


int main(void)

int num,a[] = 12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5;
num=getMaxK(a, 15, 4);
int i;
for(i=0;i<15;i++)

printf("%7d",a[i]);

puts("\\n");
printf("%d\\n",num);
system("pause");
return 0;
 


以上是关于任意输入n个数,求第k大的数?用C语言,写出完整代码。的主要内容,如果未能解决你的问题,请参考以下文章

求第K大数(分治)

C语言编程:求n以内的k个最大素数以及他们的和,咋写

用C语言编计算并输出k以内最大的10个能被13或17整除的自然数之和。当从键盘输入500时,求出答案。谢谢

C语言编程:求n以内的k个最大素数以及他们的和,咋写?

基于快速排序方法改成求第k大的数

在N(N<10000)个数里找出第k大的数,C++