desordenar un vector

eing
28 de Abril del 2008
quiero desordenar un vector, y no se como hacerlo. Existen varios algorismos para ordenar vectores... pero... hay alguno que los desordene?

arioch
28 de Abril del 2008
for(int i=0; i<tam_vector; i++)
vector[i]=rand()%100;

Te vale eso ?

josuth
28 de Abril del 2008
Hola

me parece que lo que pide es desordenar un vector existente y no llenar uno con valores aleatorios.

Si es eso mira este codigo que desordena "array" y lo pone en "desordenado":

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main(void) {
int array[100];
int estalibre[100];
int desordenado[100];
int i,pos;
time_t t;

//semilla para el rand
srand((unsigned) time(&t));

//inicializacion de los arrays
for(i=0;i<100;i++) {
array[i]=i;
estalibre[i]=1;//1 -> libre, 0 -> ocupado
}

for(i=0;i<100;i++) {
pos=rand()%100;
//este bucle evita que dos elementos sean guardados en la misma posicion
while (estalibre[pos]==0)pos=rand()%100;
desordenado[pos]=array[i];
estalibre[pos]=0;
}
}

Un saludo

JuanJoO
28 de Abril del 2008
oyee!una preguntaaa..
yo qiero hacr algo parecido pero en vez de ser un vector es una matriz! me podrias ayudar..

quiero desordenarlos.. q no se me repitan ninguno de ellos!

como hago? :(

JuanJoO
28 de Abril del 2008
oyee!una preguntaaa..
yo qiero hacr algo parecido pero en vez de ser un vector es una matriz! me podrias ayudar..

quiero desordenarlos.. q no se me repitan ninguno de ellos!

como hago? :(

eing
28 de Abril del 2008
si... de hecho lo que queria hacer era desordenar un vector existente... gracias a los dos!!!

kitik_
28 de Abril del 2008
Otra solución: Accedemos a una posición aleatoria del vector y guardamos su contenido en un vector auxiliar. Eliminamos esa posicion del vector inicial y disminuimos la variable que guarde el numero de elementos. Repetimos el proceso hasta que el vector inicial quede vacio.
Hacemos una copia del auxiliar al inicial y liberamos la memoria utilizada por el auxiliar.

ele = N_elementos;
for (i=0;i<N_elementos;i++){
n = rand()%ele;
AUX[i] = inicial[n];
for (j=n;j<ele-1;j++){
inicial[j] = inicial[j+1];
}
ele--;
}

falta hacer la copia i liberar la memoria