首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言中的Median函数

C语言中的Median函数
EN

Stack Overflow用户
提问于 2018-04-01 23:42:08
回答 3查看 714关注 0票数 0
代码语言:javascript
复制
int findMedian (int argc, char** argv){

    int temp;
    for(int i=0; i<argc; ++i) { /// bubble sort the array
        for(int j=i+1; j<argc ; ++j) {
            if(argv[i] > argv[j]) {
                temp = atoi(argv[i]);
                argv[i] = argv[j];
                *argv[j] = temp;
            }
        }
    }
    int Median;
    if(argc %2 == 0){///if is even amount of number, take the mean of middle two number

        Median= ((atoi(argv[argc / 2 ])+ atoi(argv[argc / 2 + 1])) /2);
    }
    else{ /// if is odd amount of number, take the middle number.
        Median = atoi(argv[argc / 2 + 1 ]);
    }
    return Median;
}

我的中值函数会给出一个没有排序的中值。有人知道为什么吗?谢谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2018-04-02 08:59:07

首先,对指向数字而不是数字的字符串表示的指针进行排序。让我们假设您的数字是整数(因为您使用atoi并返回int)。您应该分配一个适当长度的整数数组,在循环中使用strtol()将字符串转换为整数,并将整数存储到数组中。现在,数据已经准备好进行排序了。

注意1:不要使用atoi()进行转换,因为它不能区分真0和非数字字符串-除非您能保证所有字符串都是整数的有效表示。

注2:由于您的函数旨在计算整数数组的中位数,因此应将整数数组作为参数。在其他地方(在调用者中)进行转换。

最后,考虑使用qsort()而不是手动对数组进行排序。众所周知,与您的代码不同,qsort()可以工作,而且它的平均速度要快得多。

票数 1
EN

Stack Overflow用户

发布于 2018-04-01 23:51:43

如果要进行这样的比较,则必须执行以下操作之一:

代码语言:javascript
复制
sscanf(argv[i], "%f", ...);
sscanf(argv[j], "%f", ...);

然后比较scanf浮点数的值。

代码语言:javascript
复制
strcmp(argv[i], argv[j]);
stricmp(argv[i], argv[j]); // if your compiler requires it. 

或者其他的衍生工具。

票数 0
EN

Stack Overflow用户

发布于 2018-04-02 08:59:59

1)如果您想对数字数组进行排序,则需要先将字符串(char*)参数转换为数字。处理argv**字符串数组,并使用atoi或更好的strtol函数将每个char*参数转换为整数,填充新的整数数组。

2)有了整数数组,你可以用库qsort函数对它们进行排序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49599751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档