C语言。。给你N(N<=1000)个不同的数,每个数都小于10的六次方,求第k小的数与第k大的数。
答案:1 悬赏:40 手机版
解决时间 2021-02-04 01:40
- 提问者网友:末路
- 2021-02-03 20:58
C语言。。给你N(N<=1000)个不同的数,每个数都小于10的六次方,求第k小的数与第k大的数。
最佳答案
- 五星知识达人网友:往事埋风中
- 2021-02-03 22:17
#include
#include
#include
#define MAX 500 //预定义数组长度,方便更改、调试
void quitSort(int a[],int s,int t)//对a[s]至a[t]的元素
//按从小到大顺序,快速排序
{
if(s {
int i=s,j=t;
int temp=a[s];
while(i {
while(i=temp)
j--;
if(i a[i++]=a[j]; //用a[j]把a[i]这个坑填掉,i右移一个位置
while(j>i&&a[i] i++;
if(i a[j--]=a[i]; ///用a[i]把a[j]这个新坑填掉,j左移一个位置
}
a[i]=temp;//用从第一个坑挖出来的temp=a[i]回填a[i]这个最新坑
quitSort(a,s,i-1);//对左区间进行递归排序
quitSort(a,i+1,t);//对右区间进行递归排序
}
}
int main()
{
int i,a[MAX]={0};
int n,k;
srand((unsigned int)time(NULL));//初始化随机数种子
scanf("%d%d",&n,&k);//输入n,k
for(i=0;i {
//scanf("%d",&a[i]);//手工输入数组元素
a[i]=rand();//生成随机数填充数组,方便调试
//printf(" %d",a[i]);//调试用
}
quitSort(a,0,MAX-1);//对数组排序
//有序后,随便按序号输出,比如要最大的数,即a[MAX-1]
//最小的数:a[0],倒数第二小的数:a[1],以此类推
printf("%d %d
", a[k],a[MAX-1-k]); //对你题目的第k小,第k大不是很理解
//就当是 从最大排下来,第k个 是为第k大吧。由最小的数开始,第k个,是为第k小
//如果不符合你的要求,请自行修改。
return 0;
}
#include
#include
#define MAX 500 //预定义数组长度,方便更改、调试
void quitSort(int a[],int s,int t)//对a[s]至a[t]的元素
//按从小到大顺序,快速排序
{
if(s
int i=s,j=t;
int temp=a[s];
while(i
while(i
j--;
if(i
while(j>i&&a[i]
if(i
}
a[i]=temp;//用从第一个坑挖出来的temp=a[i]回填a[i]这个最新坑
quitSort(a,s,i-1);//对左区间进行递归排序
quitSort(a,i+1,t);//对右区间进行递归排序
}
}
int main()
{
int i,a[MAX]={0};
int n,k;
srand((unsigned int)time(NULL));//初始化随机数种子
scanf("%d%d",&n,&k);//输入n,k
for(i=0;i
//scanf("%d",&a[i]);//手工输入数组元素
a[i]=rand();//生成随机数填充数组,方便调试
//printf(" %d",a[i]);//调试用
}
quitSort(a,0,MAX-1);//对数组排序
//有序后,随便按序号输出,比如要最大的数,即a[MAX-1]
//最小的数:a[0],倒数第二小的数:a[1],以此类推
printf("%d %d
", a[k],a[MAX-1-k]); //对你题目的第k小,第k大不是很理解
//就当是 从最大排下来,第k个 是为第k大吧。由最小的数开始,第k个,是为第k小
//如果不符合你的要求,请自行修改。
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯