Selectiosort
Buonasera,
algoritmo selectionsort in linguaggio fortran90, spero che qualcuno di santa pazienza, mi indichi dove ho sbagliato.
Vi riporto il codice
in particolare mi da il seguente errore
Buona serata.
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
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..
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.

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.