C++
这是我的函数调用
int gr_tperctile = tprctile(channel_gr, sizeOfChannel, 0.2);
这是我写的函数
int Detection::tprctile(int* gr, int sizeOfChannel, double pt)
{
qsort(gr,sizeOfChannel, sizeof(int),compare);
int ptInd = floor( (pt/100 * sizeOfChannel ) +0.5);
return gr[ptInd];
}
int compare(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
MATLAB
这是最初的函数调用
toolbox.c3d.p.tprctile(Gr(:),0.2)
这是最初的函数
function val = tprctile(data, pt)
data = sort(data);
ptInd = round( pt/100 * length(data) );
val = data(ptInd);
我不确定我的实现,并测试了有限的数目的例子。有人能告诉我这是否正确吗?或者一个更好的方法来实现matlab
发布于 2014-11-03 14:21:36
如果您有C++ (从您使用类的角度来看,显然是这样),那么为什么要使用缓慢的、类型不安全的qsort
函数呢?相反,试着:
std::sort(gr, gr+sizeOfChannel);
替换了所有的
qsort(gr,sizeOfChannel, sizeof(int),compare);
int compare(const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
我有没有提过它更快?那是因为比较被内联了。
正如Amro所指出的,您也可以使用
std::nth_element(gr, gr+ptInd, gr+sizeOfChannel);
更快了。
https://stackoverflow.com/questions/26724231
复制相似问题