2013-11-27 2 views
0

У меня есть массив целых чисел. Целые числа могут быть положительными или отрицательными, и могут быть дубликаты. Я сортирую массив, от низкого до высокого, используя qsort.вычисление относительного положения в массиве в c

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

Затем я хочу найти относительное положение одного из целых чисел (X) в массиве, так что я разделить позицию (Y) целого числа от размера массива (S), и вычитать .5 из результата, так что относительное положение выражается по шкале от -50 до 0,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)?

+0

Убедитесь, что вы выполняете разделение с плавающей точкой, а не целое. ;) – anishsane

+2

Неужели вы пытаетесь его реализовать? –

+0

Каково ваше решение для дубликатов? Например, какой результат вы хотите для массива [1, 1, 1, 1]? – yasen

ответ

1

1) Что такое правильный способ вычислить это, так что я в конечном итоге с низким значением, равным -.5 и высокое значение = .5?

Поскольку самое высокое положение в массиве находится в S - 1 (где S является размер массива), вам придется делить на S - 1 вместо S. Обязательно иметь специальный корпус для массивов размером 1, или вы получите деление на 0.

2) Как я могу точно рассчитать относительное положение значения при наличии дубликатов? Должен ли я удалить дубликаты, а затем использовать тот же расчет (позиция/размер - .5)?

Это зависит от того, какие относительные позиции вы хотите получить. Но удаление дубликатов звучит как разумный подход.

Смежные вопросы