Ниже приведен мой код для того, чтобы попытаться понять медиану алгоритма медианов (используя блоки размером 5). Я понимаю, как получить медианы ввода, но я не уверен, как закодировать блок, чтобы сохранить рекурсию ввода до тех пор, пока у меня не будет медиана. Затем, получив эту медиану, я не уверен, как использовать ее в качестве стержня, чтобы выбросить бесполезную информацию, чтобы разбить вход. getMediansArray
возвращает массив размера ceil (input.length/5) и getMedians
просто возвращает медиану из массива (используется только для массивов длины < = 5).Непонимание медианы алгоритма медианов для нахождения k-го элемента
public static int[] findKthElement(int[] input, int k) {
int numOfMedians = (int) Math.ceil(input.length/5.0);
int[] medians = new int[numOfMedians];
medians = getMediansArray(input, medians)
// (1) This only gets the first iteration of medians of the
// input. How do I recurse on this until I just have one median?
// (2) how should I partition about the pivot once I get it?
}
public static int[] getMediansArray(int[] input, int[] medians) {
int numOfMedians = (int) Math.ceil(input.length/5.0);
int[] five = new int[5];
for (int i = 0; i < numOfMedians; i++) {
if (i != numOfMedians - 1) {
for (int j = 0; j < 5; j++) {
five[j] = input[(i*5)+j];
}
medians[i] = getMedian(five);
} else {
int numOfRemainders = input.length % 5;
int[] remainder = new int[numOfRemainders];
for (int j = 0; j < numOfRemainders; j++) {
remainder[j] = input[(i*5)+j];
}
medians[i] = getMedian(five);
}
}
return medians;
}
public static int getMedian(int[] input) {
Arrays.sort(input);
if (input.length % 2 == 0) {
return (input[input.length/2] + input[input.length/2 - 1])/2;
}
return input[input.length/2];
}
Название запрашивает элемент kth, и вопрос задает точную медианную. Я хотел бы представить, что мои отзывы являются конструктивными (хотя и не такими информативными, как URL, с которым я связан). – Daniel