Selectiosort

galles90
Buonasera,

algoritmo selectionsort in linguaggio fortran90, spero che qualcuno di santa pazienza, mi indichi dove ho sbagliato.
Vi riporto il codice

program main
real:: a(100),key,k
integer:: i,j,n
print*, "inserire ordine array"
read*, n
print*, "inserire elementi array"
do i=1,n
	read*, a(i)
end do
do i=1,n
k=a(i)
	j=i
	do
	j=j+1
	key=a(j)
		if (key<k) then
		k=key
		end if 
	if (j==n) exit
	end do 
a(i)=k
end do
print*, "stampa elementi array ordinato"
do i=1,n
print*, a(i)
end do
end


in particolare mi da il seguente errore
 inserire ordine array
1
 inserire elementi array
1
Exception: Access Violation
Traceback: not available, compile with -ftrace=frame or -ftrace=full


Buona serata.

Risposte
apatriarca
Il problema è che per \(i = n,\) \(j = n+1\) nel ciclo interno. In realtà non c'è alcun bisogno di considerare \(i = n\) in quanto ovviamente non ci sono più valori rimanenti. Per cui il ciclo esterno dovrebbe essere \(i=1,n-1\) e quello interno \(j=i+1,n\). Ma il codice è comunque sbagliato in quando devi scambiare i valori contenuti in \(a(i)\) e il minimo dei \(a(j)\). Tu stai invece sovrascrivendo il valore di \(a(i)\) lasciando il resto invariato..

galles90
Grazie apatriarca, dopo vari tentativi, l'algoritmo funziona :-)
In effetti, come tu hai detto, l'errori erano sugli scambi di variabile e su gli indici, ho corretto e va.

Grazie mille per l'aiuto.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.