C语言中的中值函数

C语言中的中值函数,c,C,我的中值函数将给出一个未排序的中值。有人知道为什么吗? 感谢您的帮助。如果要进行这样的比较,您必须执行以下操作之一: 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[

我的中值函数将给出一个未排序的中值。有人知道为什么吗?
感谢您的帮助。

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

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;
}
然后比较scanf浮动中的值

sscanf(argv[i], "%f", ...);
sscanf(argv[j], "%f", ...);

或者其他衍生产品

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

注意1:不要使用atoi进行转换,因为它无法从非数字字符串中区分真0-除非您可以保证所有字符串都是整数的有效表示形式

注2:由于函数用于计算整数数组的中值,因此将整数数组作为参数。在调用方的其他位置执行转换


最后,考虑使用Q排序,而不是手动排序数组。qsort与您的代码不同,它的工作效率更高。

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


2拥有整数数组,您可以使用库函数对它们进行排序。

如果argv[i]>argv[j],至少该if语句{没有意义。这些是复杂的指针本身,而不是指针值。请注意,这不应该是一致的。我相信这一个不是严重的问题。在原始代码中使用atoi时,应该假设所有输入都是正确的。建议更好,strtol。
strcmp(argv[i], argv[j]);
stricmp(argv[i], argv[j]); // if your compiler requires it.