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/

10-10 12:30