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;
}
我的中位函数会给我一个未排序的中位数。谁知道为什么? 谢谢你的帮助。
答案 0 :(得分:1)
首先,对数字的字符串表示而不是数字进行排序。假设您的数字是整数(因为您使用atoi
并返回int
)。您应该分配一个适当长度的整数数组,在循环中将字符串转换为带有strtol()
的整数,并将整数存储到数组中。现在,数据已准备好进行排序。
注1 :不要使用atoi()
进行转换,因为它无法从非数字字符串中分辨出真0 - 除非您可以保证所有字符串都是整数的有效表示数字。
注2 :由于您的函数用于计算整数数组的中位数,因此请将整数数组作为参数。在其他地方进行转换(在调用者中)。
最后,考虑使用qsort()
而不是手动排序数组。已知qsort()
可以使用,与您的代码不同,它的平均速度要快得多。
答案 1 :(得分:0)
如果您要进行此类比较,则必须执行以下操作之一:
sscanf(argv[i], "%f", ...);
sscanf(argv[j], "%f", ...);
然后比较scanf浮点数的值。
strcmp(argv[i], argv[j]);
stricmp(argv[i], argv[j]); // if your compiler requires it.
或其他一些衍生物。
答案 2 :(得分:0)