En primer lugar, ¿cuál es el tipo de cubo
Bucket sort (Bucket especie) o el llamado cuadro de tipo es un algoritmo de clasificación, el principio es para ser asignado a un número limitado de matriz de cubo. Cada cubeta individual y luego ordenados (es posible reutilización o cualquier otro algoritmo de ordenación de forma recursiva continuar usando balde sorting).
Para ordenar los elementos de cubo, elegir el algoritmo de ordenación compara crucial para el rendimiento
En segundo lugar, la implementación
- Establecer una matriz cuantitativa como un cubo vacío.
- Buscar secuencia, y proyectar en un cubo correspondiente a.
- Cada uno no vaciar el cubo tipo.
- De la casa no es proyectos barril vacío y luego de vuelta a la secuencia original.
En tercer lugar, para lograr ejemplos
Pseudo-código:
function bucket-sort(array, n) is
buckets ← new array of n empty lists
for i = 0 to (length(array)-1) do
insert array[i] into buckets[msbits(array[i], k)]
for i = 0 to n - 1 do
next-sort(buckets[i])
return the concatenation of buckets[0], ..., buckets[n-1]
La distribución de los elementos en el cubo:
La distribución de los elementos en el cubo:
* De Wiki https://zh.wikipedia.org/wiki/ cubo especie
En cuarto lugar, los parámetros de rendimiento en el cubo especie
1, tiempo de complejidad
El peor tiempo de complejidad:
la complejidad media de tiempo:
complejidades de tiempo:
2, la complejidad del espacio
El espacio peor complejidad:
3, es estable
estable
4, cualquier tipo adecuado de almacenamiento
almacenamiento secuencial y de la cadena de almacenamiento
En quinto lugar, la aplicación del código
El principio de la utilización de sub-barrilpuntos simples barril
enReducción de puntos de barrilEl tiempo para escribir ...
* Porción algoritmo de la referencia de
https://www.geeksforgeeks.org/bucket-sort-2/
* puntos principio barril de referencia de
https://mp.weixin.qq.com/s/qq8-anybC8aYX5dnyrXmwA
sección de algoritmos
void bucketSort(int arr[],int len)
{
// 1 找到最大值
int max = arr[0];
for (int i = 1; i < len; i++)
{
if (arr[i] > max)
max = arr[i];
}
// 2 找到最小值
int min = arr[0];
for (int i = 1; i < len; i++)
{
if (arr[i] < min)
min = arr[i];
}
// 3 根据最大值和最小值创建桶
int bucketNum = max/10 - min/10 + 1 ;
vector<int> b[bucketNum];
// 4 根据简单分桶,把元素放入桶中
for (int i = 0; i < len; i++)
{
int bi = (arr[i] - min )/10;
b[bi].push_back(arr[i]);
}
// 5 每个桶内单独排序
for (int i = 0; i < bucketNum; i++)
{
if (b[i].size() > 0) //当桶内元素大于0才排序
{
sort(b[i].begin(), b[i].end());
}
}
// 6 将桶内的元素放入arr中
int index = 0;
for (int i = 0; i < bucketNum; i++)
{
for (int j = 0; j < b[i].size(); j++)
{
arr[index++] = b[i][j];
}
}
}