Per chi ha studiato informatica, questo è il primo algoritmo complesso che viene insegnato. Vediamo come risolvere questo problema con VBScript. Per prima cosa dichiariamo un array statico e riempiamolo di valori:
<script language="vbscript">
dim numeri(10)
numeri(0)=5
numeri(1)=54
numeri(2)=22
numeri(3)=43
numeri(4)=232
numeri(5)=51
numeri(6)=11
numeri(7)=3
numeri(8)=53
numeri(9)=54
</script>
Attenzione: in VBScript non è necessario dichiarare le variabili, ma è obbligatorio dichiarare un array prima di usarlo.
Con la prima riga: (Dim numeri(10)) abbiamo creato un array chiamato "numeri", formato da 10 elementi; i vari elementi dell'array sono identificati da 0 a 9 e nelle righe successive dell'esempio vengono inizializzati ad un valore numerico. Il tipo degli elementi di un array può anche essere "stringa, data o uno qualsiasi dei sottotipi del VBScript" (vedi capitolo 3 della guida a VBScript).
Passiamo ora ad ordinare i valori dell'array.
Per prima cosa scriviamo un algoritmo che ci restituisca la posizione nell'array del numero più piccolo: per fare ciò, basta prendere il primo elemento dell'array e confrontarlo con gli altri; quando se ne trova uno più piccolo, viene memorizzato l'indice di questo elemento e viene confrontato con i successivi.
<script language="vbscript">
dim numeri(10)
numeri(0)=5
numeri(1)=54
numeri(2)=22
numeri(3)=43
numeri(4)=232
numeri(5)=51
numeri(6)=11
numeri(7)=3
numeri(8)=53
numeri(9)=54
indice_del_numero_minore = 0
for indice = 1 to 9
if numeri(indice) < numeri(indice_del_numero_minore) then
indice_del_numero_minore = indice
end if
next
document.write "Il numero più piccolo è " & numeri(indice_del_numero_minore)
</script>
Il risultato sarà: il numero più piccolo è 3.
Ora effettuiamo un'operazione detta SWAP, cioè scambiamo il primo elemento dell'array con l'elemento contenente il numero più piccolo. Per farlo si ricorre ad una variabile temporanea:
<script language="vbscript">
dim numeri(10)
numeri(0)=5
numeri(1)=54
numeri(2)=22
numeri(3)=43
numeri(4)=232
numeri(5)=51
numeri(6)=11
numeri(7)=3
numeri(8)=53
numeri(9)=54
indice_del_numero_minore = 0
for indice = 1 to 9
if numeri(indice) < numeri(indice_del_numero_minore) then
indice_del_numero_minore = indice
end if
next
document.write "Array prima dello SWAP:"
for indice=0 to 9
document.write indice & " - " & numeri(indice) & "<br/>"
next
temp = numeri(indice_del_numero_minore)
numeri(indice_del_numero_minore) = numeri(0)
numeri(0) = temp
document.write "Array dopo lo SWAP:"
for indice = 0 to 9
document.write indice & " - " & numeri(indice) & "<br/>"
next
</script>
Ecco il risultato:
Array prima dello SWAP:
0 - 5
1 - 54
2 - 22
3 - 43
4 - 232
5 - 51
6 - 11
7 - 3
8 - 53
9 - 54
Array dopo lo SWAP:
0 - 3
1 - 54
2 - 22
3 - 43
4 - 232
5 - 51
6 - 11
7 - 5
8 - 53
9 - 54
Ora il primo elemento dell'array è ordinato e non resta che ripetere l'algoritmo sui rimanenti 9 elementi; con questo procedimento verranno ordinati i primi 2 elementi dell'array e bisognerà poi ripetere l'algotitmo sui rimanenti 8. Ripetendo l'algoritmo fino all'ultimo elemento, si otterrà l'array ordinato.
<script language="vbscript">
dim numeri(10)
numeri(0)=5
numeri(1)=54
numeri(2)=22
numeri(3)=43
numeri(4)=232
numeri(5)=51
numeri(6)=11
numeri(7)=3
numeri(8)=53
numeri(9)=54
for i=0 to 8
indice_del_numero_minore=i
for indice=i+1 to 9
if numeri(indice)<numeri(indice_del_numero_minore) then
indice_del_numero_minore=indice
end if
next
temp=numeri(indice_del_numero_minore)
numeri(indice_del_numero_minore)=numeri(i)
numeri(i)=temp
next
document.write "Array Ordinato:"
for indice=0 to 9
document.write indice & " - " & numeri(indice) & "<br/>"
next
</script>
Risultato:
Array Ordinato:
0 - 3
1 - 5
2 - 11
3 - 22
4 - 43
5 - 51
6 - 53
7 - 54
8 - 54
9 - 232
Nei prossimi articoli vedremo altri algoritmi di ordinamento e come ordinare un array dinamico.