Esercizio 10
Eseguire il disordinamento di un vettore di interi ordinato tramite l'algoritmo di scambio.
Un metodo per mischiare le posizioni degli elementi di un array è definito come "algoritmo per una permutazione casuale di un insieme finito", ovvero un metodo per disordinare (mischiare) un insieme. Inizialmente ideato da Ronald Fisher e Frank Yates, è stato poi ottimizzato sia per le iterazioni necessarie a conseguire il risultato, sia per la capacità di operare in-place sull'insieme iniziale (cioè il risultato non opera il disordinamento creando una copia dell'insieme iniziale). Il principio è quello di pescare una posizione (escluso l'ultima) in modo casuale sull'array. Tale posizione viene scambiata con l'ultima, che si consolida e non partecipa più alla successiva iterazione. La posizione che precedeva l'ultima diventa la nuova ultima e il ciclo si ripete fino al consolidamento della posizione 2 dell'array (la prima lo diviene automaticamente), che determina la fine del disordinamento.
#include<iostream>
#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<math.h>
using namespace std;
main(){
int i,rndpos,tmp;
int T[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int lg=sizeof(T)/sizeof(T[0]);
srand(time(0));
for( i= 0; i<lg; i++ ){
// 0 <= rndpos <= k-1
rndpos = floor(rand()%101 * i/100);
// scambia T[i] con T[rndpos]
tmp = T[i];
T[i] = T[rndpos];
T[rndpos] = tmp;
}//fine for
for( i=0; i<lg; i++ )cout<<" "<<T[i];
}//main