永发信息网

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;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯