急求程序代码 :从包含n个整数的无序列表中输出第K1小到第K2小之间的所有整数,其中K1<=k2,分析时间复杂度

使用分治法,C++语言,但不能简单的重复使用求第K小元素的分治法,不能使用排序算法。

第1个回答  2021-12-23
#include "stdio.h"
int k1,k2;
void fun(int *d,int m,int n)
{
int count;
count=0;
for(int j=0;j<n;j++)
{
if(d[m]<=d[j])
count=count+1;
}
if(n-count+1>=k1 && n-count+1<=k2)
printf("%d ",d[m]);
}
int main()
{
int d[100],n;
printf("输入整数个数:");
scanf("%d",&n);
printf("输入%d个整数:\n",n);
for(int i=0;i<n;i++)
scanf("%d",&d[i]);
printf("输入范围上下限(第k1小到第k2小之间):");
scanf("%d %d",&k1,&k2);
for(int j=0;j<n;j++)//逐个看是否第k1小到第k2小之间
fun(d,j,n);
}