Algoritmo ordnamento per selezione

G.D.5
Salve. Secondo voi, questo algoritmo di ordinaento per selezione è scritto bene (uso il Pascal Like per scriverlo su foglio - o almeno così mi pare che il prof. lo abbia chiamato :lol: )

begin ord_sel

var : A[10] : array of real 
var : t,max : real
var : i,j,n,m,p : integer
read n
for i=1 to n do
  read A[i]
endfor
for i=1 to n-1 do
  m:=n-i+1
  p:=1
  max:=A[1]
    for j=2 to m
      if (A[j]>max) then
        p:=j
        max:=A[j]
      endif
    endfor
  t:=A[m]
  A[m]:=A[p]
  A[p]:=t
endfor
for i=1 to n do
  print A[i]
endfor

end ord_sel

Risposte
Umby2
L'istruzione: max:=A[1] per me è incomprensibile..

freddofede
E' un banale assegnamento di un elemento dell'array alla variabile, Umby.

Comunque il meccanismo sembra andar bene, controlla semmai la presenza di eventuali ridondanze.
E commenta il codice, specie per chi come me è abituato a ordinare il vettore dall'inizio alla fine :-).

Umby2
lore, il mio incomprensibile si riferiva a dove è stata posta questa istruzione, non alla istruzione in se. :roll:

Fioravante Patrone1
"Umby":
lore, il mio incomprensibile si riferiva a dove è stata posta questa istruzione, non alla istruzione in se. :roll:

E allora potevi dirlo chiaramente.
Qui i bit per gli utenti sono gratis e la cortesia non è mai abbastanza, come mostra questo mio post.

apatriarca
Credo che la lettura dell'array e della sua dimensione e la visualizzazione non facciano parte dell'algoritmo e non siano da inserire. Il lettore è in questo modo costretto a cercare all'interno dello pseudocodice la parte interessante che invece dovrebbe essere subito evidente. L'algoritmo mi sembra comunque corretto e abbastanza comprensibile.

G.D.5
@ apatriarca
Non ti ho capito: se all'esecutore dell'algoritmo non dico quanto è lungo l'array e quali elementi esso contine, come fa l'esecutore a lavorarci sopra?


@Umby
Dove dovrebbe stare l'istruzione max:=A[1]?

apatriarca
Un algoritmo di ordinamento si implementa normalmente come una funzione in cui l’array e la sua dimensione vengono passati come argomenti. Non ha importanza al fine del tuo algoritmo in che modo vengono letti questi dati o in che modo verranno usati (per esempio visualizzandoli). Per farti un esempio, nel paper “Real-Time KD-Tree Construction on Graphics Hardware” di Kun Zhou, Qiming Hou, Rui Wang e Baining Guo pubblicato al Siggraph Asia 2008 (il primo che mi è capitato sotto mano) gli algoritmi vengono presentati come funzioni (o procedure se non restituiscono valori) nel modo seguente:

procedure BUILDTREE(triangles:list)
begin
// ... codice
end

Nel tuo caso n e A sono i parametri della tua funzione.

G.D.5
"apatriarca":
Un algoritmo di ordinamento si implementa normalmente come una funzione in cui l’array e la sua dimensione vengono passati come argomenti. Non ha importanza al fine del tuo algoritmo in che modo vengono letti questi dati o in che modo verranno usati (per esempio visualizzandoli). Per farti un esempio, nel paper “Real-Time KD-Tree Construction on Graphics Hardware” di Kun Zhou, Qiming Hou, Rui Wang e Baining Guo pubblicato al Siggraph Asia 2008 (il primo che mi è capitato sotto mano) gli algoritmi vengono presentati come funzioni (o procedure se non restituiscono valori) nel modo seguente:

procedure BUILDTREE(triangles:list)
begin
// ... codice
end

Nel tuo caso n e A sono i parametri della tua funzione.


Amico mio, ti ringrazio per le informazioni molto complete che mi hai fornito, ma per me sono arabo :oops:
Terrò a mente questo tuo post per rileggerlo in tempi più maturi.
Grazie.

apatriarca
In realtà non ti ho detto niente di così complicato. Volevo solo farti notare che solo una parte del tuo pseudocodice descrive l'algoritmo di ordinamento, il resto non è necessario e potrebbe essere omesso.

C’è inoltre un errore che ho notato solo adesso. A ha dimensione 10, ma poi leggi tranquillamente n valori senza verificare se questo numero è inferiore al massimo.

Umby2
"WiZaRd":


@Umby
Dove dovrebbe stare l'istruzione max:=A[1]?


è sempre un po difficile, entrare nella logica di chi ha scritto un programma, seppur semplice.

Rileggendo ho capito di cosa si tratta.
Praticamente dopo aver trovato il numero piu alto, lo posizioni in fondo alla stringa, ripartendo dal primo. :wink:

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