2
respostas

[Dúvida] Dúvida sincera

Se eu concatenasse as listas

Ex: let finalList = [..arr1, arr2];

Porque este processo de desordenar e depois ordenar seria mais trabalhoso do que este processo que fizemos, até que ponto vale a pena ordenar esta lista usando um .sort()?

let finalList = [..arr1, arr2].sort();

é uma lista pequena, ainda assim a complexidade seria maior do que intercalar?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
2 respostas

Oi Augusto! Como vai?

A questão que você levantou é bastante interessante e envolve a eficiência dos algoritmos de ordenação e a manipulação de listas em JavaScript. Quando você concatena duas listas e depois utiliza o método .sort(), você está basicamente pedindo ao JavaScript para reorganizar todos os elementos da lista concatenada, o que pode ser mais custoso em termos de desempenho, especialmente se a lista for grande.

O método .sort() em JavaScript, por padrão, utiliza o algoritmo de ordenação Timsort, que tem uma complexidade de tempo média de O(n log n). Isso significa que o tempo necessário para ordenar a lista cresce de forma logarítmica em relação ao número de elementos.

Por outro lado, se você já tem duas listas ordenadas e deseja combiná-las em uma lista ordenada, é mais eficiente intercalar os elementos das duas listas. Este processo de intercalação pode ser feito em tempo linear O(n), porque você só precisa passar por cada lista uma vez e comparar os elementos para colocá-los na posição correta na lista final.

Por exemplo, se você tem duas listas ordenadas arr1 e arr2, você pode fazer algo assim:

let i = 0, j = 0;
let finalList = [];

while (i < arr1.length && j < arr2.length) {
  if (arr1[i] < arr2[j]) {
    finalList.push(arr1[i]);
    i++;
  } else {
    finalList.push(arr2[j]);
    j++;
  }
}

// Adiciona os elementos restantes
while (i < arr1.length) {
  finalList.push(arr1[i]);
  i++;
}

while (j < arr2.length) {
  finalList.push(arr2[j]);
  j++;
}

Esse método é mais eficiente do que concatenar e ordenar novamente, especialmente para listas grandes. Para listas pequenas, a diferença pode não ser tão perceptível, mas é sempre bom praticar a implementação de soluções mais eficientes.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Obrigado, seu exemplo esclareceu bem!