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;
}我的中值函数会给出一个没有排序的中值。有人知道为什么吗?谢谢你的帮助。
发布于 2018-04-02 08:59:07
首先,对指向数字而不是数字的字符串表示的指针进行排序。让我们假设您的数字是整数(因为您使用atoi并返回int)。您应该分配一个适当长度的整数数组,在循环中使用strtol()将字符串转换为整数,并将整数存储到数组中。现在,数据已经准备好进行排序了。
注意1:不要使用atoi()进行转换,因为它不能区分真0和非数字字符串-除非您能保证所有字符串都是整数的有效表示。
注2:由于您的函数旨在计算整数数组的中位数,因此应将整数数组作为参数。在其他地方(在调用者中)进行转换。
最后,考虑使用qsort()而不是手动对数组进行排序。众所周知,与您的代码不同,qsort()可以工作,而且它的平均速度要快得多。
发布于 2018-04-01 23:51:43
如果要进行这样的比较,则必须执行以下操作之一:
sscanf(argv[i], "%f", ...);
sscanf(argv[j], "%f", ...);然后比较scanf浮点数的值。
strcmp(argv[i], argv[j]);
stricmp(argv[i], argv[j]); // if your compiler requires it. 或者其他的衍生工具。
发布于 2018-04-02 08:59:59
1)如果您想对数字数组进行排序,则需要先将字符串(char*)参数转换为数字。处理argv**字符串数组,并使用atoi或更好的strtol函数将每个char*参数转换为整数,填充新的整数数组。
2)有了整数数组,你可以用库qsort函数对它们进行排序。
https://stackoverflow.com/questions/49599751
复制相似问题