Junior — Middle
Poderia explicar o princípio de funcionamento do algoritmo Quickselect?
sobes.tech IA
Resposta da IA
O algoritmo Quickselect é utilizado para encontrar o elemento k-ésimo em um array não ordenado. Baseia-se na ideia de ordenação rápida (Quicksort), mas, em vez de ordenar completamente o array, seleciona recursivamente apenas a parte onde o elemento procurado pode estar.
Princípio de funcionamento:
- Escolhe-se um elemento pivô.
- O array é dividido em elementos menores e maiores que o pivô.
- Determina-se a posição do pivô após a partição.
- Se a posição corresponder a k, retorna-se o pivô.
- Caso contrário, procura-se recursivamente na parte esquerda ou direita do array.
Isso permite encontrar o elemento k em tempo médio O(n).
Exemplo em Java:
public int quickselect(int[] arr, int k) {
return quickselectHelper(arr, 0, arr.length - 1, k);
}
private int quickselectHelper(int[] arr, int left, int right, int k) {
if (left == right) return arr[left];
int pivotIndex = partition(arr, left, right);
if (k == pivotIndex) {
return arr[k];
} else if (k < pivotIndex) {
return quickselectHelper(arr, left, pivotIndex - 1, k);
} else {
return quickselectHelper(arr, pivotIndex + 1, right, k);
}
}
private int partition(int[] arr, int left, int right) {
int pivot = arr[right];
int i = left;
for (int j = left; j < right; j++) {
if (arr[j] <= pivot) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
}
}
int temp = arr[i];
arr[i] = arr[right];
arr[right] = temp;
return i;
}