Suponiendo por las etiquetas que quiere decir en C:
/ ** * Destructivamente lee un elemento aleatorio de A. * * * Esta función modifica A irreversiblemente. * * * @param A La matriz para leer. * @param stayPtr Un puntero a una variable que contiene el resto * número de elementos en A. * @return Un elemento aleatorio de A del rango [0, * restoPtr) * / int readNextElement (int * A, ssize_t * restantesPtr) { afirmar (* restoPtr> 0); // Usa tu enfoque favorito para generar un número entero // en el rango [0, * restoPtr) como arc4random_uniform (). int index = floor (drand48 () * (* restantesPtr)); valor int = A [índice]; A [índice] = A [- (* restoPtr)]; // *** valor de retorno; } ... int Val [] = {1,2,3,4,5}; ssize_t restante = sizeof (Val) / sizeof (Val [0]); while (restante> 0) { int nextVal = readNextElement (Val, y restante); ... }
Un poco menos de contabilidad que una mezcla aleatoria de Fisher-Yates [1], pero hace el trabajo si está tratando de crear una secuencia de valores de entrada. La asignación en la línea marcada *** se puede reemplazar con una operación de intercambio para preservar los valores (pero no el orden) de A.
Notas al pie
- ¿Cuál es la mejor manera de aprender a escribir algoritmos?
- ¿Cuál es el proceso de un algoritmo de red neuronal convolucional para un OCR?
- ¿Cuáles son las principales diferencias en términos de definición / idea clave, dominio de aplicación y eficiencia entre árboles de segmento, árboles de intervalo, árboles indexados binarios y árboles de rango?
- Quiero comenzar un proyecto de programación. ¿Cuáles son algunas sugerencias al respecto?
- En un microprocesador 8085, ¿cómo podemos encontrar el número de ciclos de la máquina y el número de estados T de cualquier mnemónico dado?
[1] Fisher – Yates baraja – Wikipedia