PDA

View Full Version : Algoritmo di ordinamento per selezione


gd020188
21-11-2008, 19:54
Salve a tutti. Sono nuovo di queste parti. Frequento l'università e sono negato per l'informatica. Quindi mi chiedevo se potete darmi una mano nel risolvere i miei dubbi su algoritmi che per voi saranno sicuramente stupidaggini.

Devo sviluppare un algoritmo per l'ordinamento di un array tramite il metodo di selezione del massimo.

Questo è quello che ho sviluppato. Per scrivere l'algoritmo su foglio, uso il Pascal Like (o almeno questo mi pare sia il nome del linguaggio che ci è stato dato per fare queste stesure su foglio), e per metterlo sul PC uso il Fortran90.

Vi lascio l'algoritmo in Pascal Like: mi dite se è giusto? Grazie



begin ord_sel
var : A[10] : array of real
var : t,max : real
var : i,j,m,n,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

cionci
22-11-2008, 08:14
Prima cosa indenta il codice che hai scritto ed inserisci all'interno del tag CODE del forum.
Altrimenti diventa arduo capirci qualcosa ;)

gugoXX
22-11-2008, 10:08
Per dire se un algoritmo e' giusto, si puo' inziare a provare con qualche test, poi possiamo leggere l'algoritmo e si cercano eventuali casi particolari non coperti.

gd020188
22-11-2008, 11:36
Ho messo il codice nel tag CODE.

Io ho provato a ordinare l'array 5-3-1-4-2 e l'array 6-1-4-2-5-3 e mi pare funzionare.

cionci
22-11-2008, 11:45
Va bene metterlo nel tag code, ma se non indenti il codice non serve a niente ;)

The_ouroboros
22-11-2008, 12:33
http://linux.wku.edu/~lamonml/algor/sort/selection.html

gd020188
22-11-2008, 12:48
Va bene metterlo nel tag code, ma se non indenti il codice non serve a niente ;)

Che cosa significa "indentare il codice"?

gd020188
22-11-2008, 12:49
http://linux.wku.edu/~lamonml/algor/sort/selection.html

Perdonami ma non riesco a capire se il mio è buono confrontandolo con quello perché non so come tradurre l'uno nell'altro.

Alex_87_xelA
23-11-2008, 09:47
const int nmax=100; // numero max di elementi
typedef int Vettore [nmax]; // dichiarazione del tipo Vettore

// Funzione per la ricerca del minimo in un sottoelenco
void MinimoSottoelenco(const Vettore SubV, const int k, const int n, int & min, int & p)
{
min=SubV[k];
p=k;

for(int i=k+1;i<n;i++) {
if (min > SubV[i]) {
min=SubV[i];
p=i;
}
}
}

// Funzione di ordinamento per selezione
void SelectionSort(Vettore & Elenco, const int n)
{
int p;
int min;

for(int k=0;k<n-1;k++) {
MinimoSottoelenco(Elenco,k,n,min,p);
Elenco[p]=Elenco[k];
Elenco[k]=min;
}
}

cionci
23-11-2008, 09:59
Perdonami ma non riesco a capire se il mio è buono confrontandolo con quello perché non so come tradurre l'uno nell'altro.
http://it.wikipedia.org/wiki/Indentazione ;)

malocchio
23-11-2008, 13:10
begin ord_sel
var : A[10] : array of real
var : t,max : real
var : i,j,m,n,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

L'ho letto attentamente e secondo me funziona.

gd020188
26-11-2008, 00:35
Grazie a tutti. La prossima volta indenterò il codice personalmente: mi scuso per la mia mancanza.