yi_zhangzhi 2016-04-03 08:55 采纳率: 20%
浏览 1883
已结题

求中位数的中位数那里好像有问题,我找不出来。求帮忙!感激!

代码求第k小的数。编译过了,求中位数的中位数结果不对

 #include<stdio.h>
#include<stdlib.h>
void paixu(int *a,int p,int r)
{
    int b;
    for(int i=p;i<r;i++)
    {
        for(int j=r;j>i;j--)
        {
            if(a[j]>a[j-1])
            {
                b=a[j];
                a[j]=a[j-1];
                a[j-1]=b;
            }
        }
    }
}

void Swap(int *i,int *j)
{
    int b;
    b=*i;
    *i=*j;
    *j=b;
}


int Partition(int *a,int p,int r,int x)
{
    int i=p,j=r+1;
    while(true)
    {
        while(a[++i]<x&&i<r);
        while(a[--j]>x);
        if(i>=j)
            break;
        Swap(&a[i],&a[j]);
    }
    a[p]=a[j];
    a[j]=x;
    return j;
}

int Select(int *a,int p,int r,int k)
{
    int t;
    if(r-p<10)
    {
        paixu(a,p,r);
        return a[p+k-1];
    }
    for(int i=0;i<=(r-p-4)/5;i++)
    {
        paixu(a,p+5*i,p+5*i+4);
        Swap(&a[p+5*i+2],&a[p+i]);
    }
    printf("\n输出数组下标从p到p+(r-p-4)/5的元素:\n");
    for(int o=p;o<=p+(r-p-4)/5;o++)
    {
        printf("%3d",a[o]);
    }
    int x=Select(a,p,p+(r-p-4)/5,(r-p+6)/10);
    printf("\n拟中位数:%d\n",x);
    i=Partition(a,p,r,x);
    int j=i-p+1;
    printf("输出p-r:\n");
    for(int q=p;q<=r;q++)
    {
        printf("%3d",a[q]);
    }
    if(k<=j)
        return Select(a,p,i,k);
    else
        return Select(a,i+1,r,k-j);
}

int main()
{
    int a[20]={11,12,14,10,13,9,8,5,4,6,1,2,3,7,16,17,18,19,20,15};
    int k,j;
    printf("k:");
    scanf("%d",&k);
    j=Select(a,0,19,k);
    printf("第k小的元素为:%d\n",j);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-04-03 10:36
    关注

    int x=Select(a,p,p+(r-p-4)/5,(r-p+6)/10);
    这个是什么意思,你的select其实就是一个快速排序,然后找中间下标的那个。

    http://www.cnblogs.com/RootJie/archive/2012/02/13/2349649.html

    甚至你可以直接使用标准库的qsort

    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!