Arrays 在排序数组中查找百分位数

Arrays 在排序数组中查找百分位数,arrays,sorting,Arrays,Sorting,我正在写一些代码,我想知道我是否正确地计算了排序数组中的百分位数。目前,如果我想计算,比如说,第90百分位,我会这样做:ARR[9*N+1/10]。或者,假设我在计算排序数组中的第50个百分位,我这样做:ARR[5*N+1/10]。更一般地说,为了计算第x百分位,我检查索引[x/100*N+1],其中N是数组的大小 这些似乎是有效的,但我只是在想,是否有一些边缘的情况下,我错过了。例如,假设您只有5个元素。那么,第90百分位应该是什么呢?它应该是最大的值吗 提前谢谢 例如,假设您只有5个元素。那

我正在写一些代码,我想知道我是否正确地计算了排序数组中的百分位数。目前,如果我想计算,比如说,第90百分位,我会这样做:ARR[9*N+1/10]。或者,假设我在计算排序数组中的第50个百分位,我这样做:ARR[5*N+1/10]。更一般地说,为了计算第x百分位,我检查索引[x/100*N+1],其中N是数组的大小

这些似乎是有效的,但我只是在想,是否有一些边缘的情况下,我错过了。例如,假设您只有5个元素。那么,第90百分位应该是什么呢?它应该是最大的值吗

提前谢谢

例如,假设您只有5个元素。那么,第90百分位应该是什么呢?它应该是最大的值吗

对。如果你按照这样的定义去做,它只是从

从最小值到最大值排序的N个有序值列表的第p个百分位是列表中的最小值,因此不超过p%的数据严格小于该值,并且至少有p%的数据小于或等于该值

第五个元素可以是第90个百分位:

不超过P%的数据严格小于该值:80%的数据严格小于最大元素,即不超过90% 至少P%的数据小于或等于该值:100%的数据小于或等于第5个元素,即至少90% 第五个元素是最小的,即使第四个和第五个元素相等,第五个元素仍然是最小的,因为百分位数是关于数值,而不是位置

对于公式的微调,边界情况更有趣——比如5元素列表中的79-80-81百分位

element index:     0       1       2       3       4
strictly less:     0%     20%     40%     60%     80%
less or equal:    20%     40%     60%     80%    100%
第79百分位:第4百分位预计为60%
 P    5*P/100    ceil(5*P/100)     (5=N)
79      3.95        4
80      4           4
81      4.05        5
int index=(int)Math.ceil(N*P/100.0)-1;
public static int percentile(int array[],float P) {
  return array[Math.max(0,
    Math.min(array.length, (int)Math.ceil(array.length*P/100))-1)];
}