Selectiosort

Messaggioda galles90 » 19/03/2019, 18:22

Buonasera,

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

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
Codice:
 inserire ordine array
1
 inserire elementi array
1
Exception: Access Violation
Traceback: not available, compile with -ftrace=frame or -ftrace=full


Buona serata.
Avatar utente
galles90
Senior Member
Senior Member
 
Messaggio: 695 di 1796
Iscritto il: 17/10/2016, 17:56
Località: Salerno

Re: Selectiosort

Messaggioda apatriarca » 23/03/2019, 21:47

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..
apatriarca
Moderatore
Moderatore
 
Messaggio: 5206 di 10435
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: Selectiosort

Messaggioda galles90 » 25/03/2019, 18:48

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.
Avatar utente
galles90
Senior Member
Senior Member
 
Messaggio: 712 di 1796
Iscritto il: 17/10/2016, 17:56
Località: Salerno


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite