在c中计算数组中的相对位置

时间:2013-11-27 13:28:46

标签: c arrays algorithm sorting

我有一个整数数组。整数可以是正数也可以是负数,可以有重复数。 我使用qsort对数组进行排序,从低到高。

int myArray[] = { -4, -2, 0, 1, 1, 3, 3, 3, 9, 14, 17, 24 };

然后我想找到一个整数(X)在数组中的相对位置,所以我将整数的位置(Y)除以数组的大小(S),并从中减去.5结果,以便相对位置以-.50到.50的比例表示。

double position = Y/S - .50;

我希望数组中的最小值(在本例中为-4)为-.50,最高值(在本例中为24)为.50?这适用于数组中的最低值,但不是最高值:

double lowPosition = 0/12 - .50;  // lowPosition = -.50 double

highPosition = 11/12 - .50;  // highPosition = .42

两个问题:

  1. 计算这个的正确方法是什么,所以最终得到的低值等于-.5而高值= .5?

  2. 如果有重复项,如何准确计算值的相对位置?我应该消除重复项,然后使用相同的计算(位置/大小 - .5)吗?

1 个答案:

答案 0 :(得分:1)

  

1)计算这个的正确方法是什么,所以最终得到的低值等于-.5而高值= .5?

由于数组中的最高位置为S - 1(其中S是数组的大小),因此您必须除以S - 1而不是S }。 确保对大小为1的数组设置特殊情况,或者按0进行除法。

  

2)当有重复时,如何准确计算值的相对位置?我应该消除重复项,然后使用相同的计算(位置/大小 - .5)?

这取决于你想要得到的相对位置。但删除重复听起来像是一种合理的方法。