typestar

Ordenar en paralelo en Rust

par_sort divide, ordena y fusiona — vale la pena cuando el slice es grande.

use rayon::prelude::*;

fn main() {
    let mut values: Vec<u64> = (0..200_000)
        .map(|n| (n * 2_654_435_761) % 100_000)
        .collect();

    values.par_sort_unstable();
    println!("{:?}", &values[..5]);

    let mut words = vec!["kiwi", "fig", "banana", "plum"];
    words.par_sort_by_key(|w| w.len());
    println!("{:?}", words);
}

Cómo funciona

  1. par_sort_unstable es el más rápido cuando los iguales dan lo mismo.
  2. par_sort_by_key toma el mismo closure de clave que la forma en serie.
  3. Los slices chicos caen solos a un ordenamiento en serie.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
14
Caracteres a escribir
307
Tokens
113
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 65 segundos.

Escribe este fragmento

Paso 3 de 3 en Iteradores paralelos; paso 3 de 9 en Paralelismo de datos con rayon.

← Anterior Siguiente →