2014-03-28 1 views
0

ive пытался решить эту проблему и застрял. Спецификация проблемы следующая:Алгоритм сортировки, сортировка вставки

Медиана чисел k определяется как наименьшее число (k/2) th , если k четное; и ((k + 1)/2) th наименьшее число если k - нечетный. Например, медиана 4-х чисел: 2 1 8 7 является вторым наименьшим числом, то есть 2, а медиана номеров 5 : 2 1 8 7 6 является третьим наименьшим числом, т.е. 6. В этой задаче, Будем иметь N чисел. Пусть kth медиана или m (k) определяется как медиана первых k номеров (1 < = k < = N). т.е. медиана 5-го или m (5) является срединной из первых 5 чисел, 8-й медиана или m (8) является медианом первых 8 чисел и т. д. Другими словами, пусть Ai обозначает i-й , то kth медиана или m (k) равна , определяемая как медиана чисел A1, A2, ..., Ak. Ваша задача - найти m (1) + m (2) + m (3) + ... + m (n), вывести сумму по модулю 100000

так что в основном вы должны читать цифры, первый номер хранится в переменной N и определяет, сколько чисел следует читать после этой точки. (это всегда 5). Затем вы должны повторять чтение чисел, сохраняя их в массиве, затем сортируя их, а затем находите медиану медианы, а затем сохраняете значение в и повторяете до тех пор, пока все числа не будут прочитаны, отсортированы и найдены медианные.

Мне удалось прочитать цифры в порядке, и я могу сортировать их в некоторой степени, но мой алгоритм сортировки, сортирует их наивысшие значения с наименьшими значениями в последнюю очередь и для того, чтобы программа работала правильно, чтобы получить желаемый результат, мне нужно, чтобы это было наоборот, и я не могу понять, как это сделать.

Числа читать будет походить так

и ответ будет 27.

Это мой код

Любая помощь по этой проблеме было бы удивительно, потому что им просто кружится в cirles, кстати System.out.println (myIntArray [4]) и т.д. является просто индикатором, чтобы увидеть, как происходит сортировка.

+0

Почему бы просто не использовать 'Arrays.sort()'? Кроме того, я не думаю, что вы должны сначала отсортировать весь массив. Это не даст вам правильного ответа. –

+0

Мне предписано использовать алгоритм для его сортировки, а не сборку java. – user3025572

+0

Что я думал, что код делает, это добавлять значение к массиву, а затем сортировать, а затем добавлять следующее значение из списка, не так ли? – user3025572

ответ

0

Кажется, что вы сортируете весь массив каждый раз. Вам нужно сортировать от 0 до i (эксклюзивно) на каждой итерации. Кроме того, для нечетной длины вам нужны скобки при вычислении индекса: myIntArray[(i+1)/2] вместо myIntArray[i+1/2]. Из-за приоритета оператора Java будет оценивать последний как myIntArray[i+(1/2)], который равен myIntArray[i], так как 1/2 равен 0 в целочисленном делении.

+0

Большое спасибо, вы отсортировали мою проблему. Ответ был правильным после добавления в круглые скобки. Теперь его разработка, как ускорить всю процедуру, чтобы соответствовать временным ограничениям – user3025572