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;
}
我的中位数函数会给我一个未排序的中位数。有人知道为什么吗?
谢谢您的帮助。
最佳答案
首先,对指向数字而不是数字的字符串表示形式的指针进行排序。假设您的数字是整数(因为使用atoi
并返回int
)。您应该分配一个适当长度的整数数组,在循环中使用strtol()
将字符串转换为整数,然后将整数存储到该数组中。现在,数据已准备好进行排序。
注1:请勿使用atoi()
进行转换,因为它不能从非数字字符串中分辨出真0-除非可以保证所有字符串都是整数的有效表示形式。
注2:由于您的函数用于计算整数数组的中位数,因此请使其以整数数组为参数。在其他地方(在调用方中)进行转换。
最后,考虑使用qsort()
而不是手动对数组进行排序。 qsort()
可以工作,与您的代码不同,它平均速度要快得多。
关于c - C的中位数函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49599751/