Junior — Middle
É possível implementar um algoritmo de ordenação que não utilize memória adicional para armazenar dados intermediários?
sobes.tech IA
Resposta da IA
Sim, existem algoritmos de ordenação que não utilizam memória adicional para armazenar dados intermédios — são chamados algoritmos in-place.
Exemplos desses algoritmos:
- Ordenação por bolha (Bubble Sort)
- Ordenação por inserção (Insertion Sort)
- Ordenação por seleção (Selection Sort)
- Ordenação rápida (Quick Sort) — com uma implementação cuidadosa
- Ordenação por heap (Heap Sort)
Estes algoritmos alteram a ordem dos elementos diretamente no array original, sem alocar memória adicional para cópias ou estruturas auxiliares.
Exemplo de ordenação rápida in-place em Java:
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
private int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] <= pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
Dessa forma, os ordenamentos in-place permitem economizar memória, embora às vezes possam ser mais lentos ou menos estáveis do que os que usam memória adicional.