Algoritmi di Ordinamento - FUSION SORT - Spiegazione dei dettagli tecnici
Автор: Piergiorgio Riva
Загружено: 2023-07-08
Просмотров: 252
Описание:
Algoritmi di Ordinamento - FUSION SORT - Spiegazione dei dettagli tecnici.
Ciao. L'algoritmo è aperto con un ciclo WHILE sempre vero che non fa altro che mettere a disposizione ad ogni ciclata, potenze di due sempre più grandi,
partendo dal 2 stesso; questo per circoscrivere il campo dove andrà a lavorare la parte più interna della routine.
La prima parte, dentro al ciclo FOR, con annidamento di primo livello, non fa altro che occuparsi dei casi limite e gestire l'uscita dalla routine
nel caso di ordinamento eseguito, nel modo che vi spiego di seguito:
Se Indice2 è maggiore dell'array e Indice1 è uguale a 1 significa che siamo di fronte alla prima potenza vuota per quanto riguarda il secondo gruppo,
perché la potenza è la prima troppo grande e si esce dalla routine; l'ordinamento è stato eseguito.
Se Indice2 è maggiore dell'array ma Indice1 è maggiore di 1 significa che il secondo gruppo da fondere non esiste per mancanza di dati quindi si va a
trascrivere semplicemente il primo gruppo nella riga di copia.
Se LimInf2 è maggiore della effettiva dimensione dell'array si imposta semplicemente LimInf2 uguale alla dimensione dell'array.
Il ciclo FOR principale non fa altro che mettere a disposizione, ad ogni ciclata, il primo elemento del primo pezzo di array sul quale andrà a
lavorare, in modo sequenziale e progressivo. Quindi alla prima ciclata del ciclo FOR esso punterà al primo elemento, alla seconda ciclata punterà al
terzo, alla terza il quinto e così via, scorrendo in questo modo tutto l'array.
Le assegnazioni della prima riga interna al ciclo FOR sono importantissime! Esse danno i limiti dei DUE gruppi sempre più grandi da fondere ad
una data ciclata del ciclo FOR ; subito a gruppi di due elementi poi a gruppi di quattro elementi poi di 8 poi di 16 e così via.
Il ciclo WHILE presente nella seconda parte annidata nel FOR non fa altro che spostare ogni elemento dei due gruppi dei quali abbiamo trovato
i limiti, nella riga di copia della matrice seguendo la progressione della variabile IndiceCopia; dando la precedenza agli elementi, individuati da
indice1 o Indice2, che escono dal confronto minori o uguali l'uno dell'altro.
Per inciso, se durante la fusione regolare dei due gruppi, sempre più grandi, un gruppo finisce perché non ha più dati, si provvederà anche in
questo caso ad una semplice trascrizione dei dati rimanenti del gruppo che ne ha ancora.
All'uscita dal ciclo FOR principale si ha lo scambio degli indici delle due righe della matrice che utilizziamo per mettere in ordine gli elementi.
Quindi, siccome non si può fare il NOT dei due indici "0" e "1" interi; con l'espediente del "gMatrice = 1 meno gMatrice e gCopia = 1 meno gCopia", si ottiene il
nostro NOT simulato degli indici, con il conseguente scambio delle righe; la riga dei dati da ordinare e quella che ha in se un ordinamento
parziale maggiore.
A questo punto il ciclo WHILE più esterno e sempre vero, tona all'inizio e provvederà a trattare la potenza di due successiva. Ciao.
Повторяем попытку...
Доступные форматы для скачивания:
Скачать видео
-
Информация по загрузке: