Classificação de balde da classificação do algoritmo javascript


Endereço do evento: Desafio de aprendizado de 21 dias da CSDN

prefácio

Muitas pessoas já ouviram falar do algoritmo de ordenação clássico, e muitas pessoas podem tê-lo usado, mas também há muitas pessoas que nunca ouviram falar dele. por que? Agora que temos cada vez mais frameworks e pacotes dependentes, poderemos usar a própria cena de sorting e encapsulá-la em uma função como um negócio.Portanto, algumas pessoas só conhecem a função, mas não sua lógica de operação.

Com base no exposto, para entender melhor a lógica de operação da função, separei algumas regras de operação do método básico de classificação, bem como alguns entendimentos pessoais, na esperança de ajudá-lo.

Este artigo abordará a classificação de baldes. A classificação de balde é, na verdade, colocar os dados em diferentes coleções de acordo com as regras, depois classificar os elementos em cada coleção e, finalmente, mesclar todas as matrizes em uma;

tipo de balde

A classificação por balde é uma versão atualizada da classificação por contagem. Ele faz uso do relacionamento de mapeamento de funções, e a chave para alta eficiência está na determinação dessa função de mapeamento;

Princípio de implementação da classificação de balde

  • Defina um número inteiro positivo fixo como o número de baldes. Precisamos colocar os dados nesses baldes, respectivamente. Geralmente, o número padrão de baldes é arredondado para baixo ((valor máximo - valor mínimo)/comprimento da matriz) + 1;
  • Atravesse o array, coloque os elementos nos baldes correspondentes de acordo com um determinado algoritmo, o algoritmo é geralmente, posição do balde = arredondar para baixo ((valor do elemento - valor mínimo) / comprimento original do array;
  • Ordene os elementos em cada balde. Neste momento, você pode pegar emprestado qualquer método de ordenação que desejar, nativo, ordenação por seleção, ordenação por contagem, etc.;
  • Excluir baldes vazios na matriz;
  • Mesclar todos os baldes com dados;

exemplo:

o código

function bucketSort(array) {
    
    
  let min = Math.min(...array);
  let max = Math.max(...array);
  //初始化桶个数
  let buketNum = Math.floor((max - min) / array.length) + 1;
  let buckets = new Array(buketNum);
  //设置桶中的每个元素为数组
  for (let i = 0; i < buckets.length; i++) {
    
    
    buckets[i] = [];
  }
  console.log('new buckets', buckets);
  //将元素分到不同的桶中,元素在哪个桶中 =  (目标元素-最小值)/ 原数组长度
  for (let j = 0; j < array.length; j++) {
    
    
    buckets[Math.floor((array[j] - min) / buketNum)].push(array[j]);
  }
  console.log('buckets info', buckets);
  //对每个桶中的数据进行排序
  for (let k = 0; k < buckets.length; k++) {
    
    
    //array.sort()排序不会有人忘记了吧
    buckets[k].sort((a, b) => {
    
    
      return a - b;
    });
  }
  console.log('buckets sort', buckets);
  //聚合桶,flat()方法不会有人不知道吧
  let result = buckets.flat();
  console.log('bucketSort result:', result);
}

bucketSort([10, 9, 100, 20, 5, 1, 4, 100]);

imagem.png

a complexidade

Complexidade de tempo: Está relacionada principalmente à complexidade de tempo de classificação dos dados de cada balde, pois a complexidade de tempo das outras partes é O(n). Portanto, quanto mais baldes forem divididos, menos dados haverá em cada balde e menos tempo levará para classificar. Mas o consumo de espaço correspondente aumentará;
complexidade do espaço: O(n)

mensagem

Como a complexidade de tempo e a complexidade de espaço da classificação de balde são lineares, a eficiência da classificação de balde é relativamente estável;
pode-se dizer que a classificação de balde é um método padrão de classificação de espaço por tempo. Na maioria das vezes, geralmente usamos o número médio de baldes para operar em vez de casos extremos.

O que levar, o que dar

Acho que você gosta

Origin blog.csdn.net/Long861774/article/details/126436719
Recomendado
Clasificación