PDA

View Full Version : Riordidare Array (VB6)


carosene
10-02-2005, 13:19
Ho il seguente problema e spero che qualcuno di voi mi aiuti:
ho un array di variabili integer che dovrei riordinare in base al valore da loro contenuto, dal più piccolo al più grande. Come posso fare senza conoscere nemmeno le dimensioni dell'array.

Fenomeno85
11-02-2005, 10:18
è un pò difficile ordinare un array senza la dimensione. E poi cmq la dimensione dell'array la devi sapere per forza dato che te sei quello che stai scrivendo il programma e poi l'array non può variare di dimensione nell'esecuzione del programma.
Al massimo può esistere il problema ho un array lungo N ma io ne utilizzo solo n<N e voglio ordinare solo questa parte.

~§~ Sempre E Solo Lei ~§~

carosene
11-02-2005, 11:25
Mi sono spiegato male facendo confusione tra lunghezza e dimensioni. Ovviamente io non conosco la lunghezza. Faccio un esempio:

Array(0)=5
Array(1)=3
Array(2)=4

Come faccio ad ottenere questo Array_ordinato?

Array_ordinato(0)=3
Array_ordinato(1)=4
Array_ordinato(2)=5

Fenomeno85
11-02-2005, 11:35
ma per ordinare un array ci sono vari modi x selezione o per quicksort.
Aspè che adesso ti converto il codice da c a vb. E poi ti posto le soluzioni.

~§~ Sempre E Solo Lei ~§~

Fenomeno85
11-02-2005, 11:45
Metodo per selezione: (non è il migliore)


Option Explicit

Private Sub Form_Load()
Dim iValue(10) As Integer
Dim i As Integer, N As Integer, K As Integer, j As Integer, supp As Integer

N = 3
iValue(0) = 5
iValue(1) = 3
iValue(2) = 4
For i = 0 To N - 2
K = i
For j = i + 1 To N - 1
If iValue(K) > iValue(j) Then
K = j
End If
Next j
If K <> i Then
supp = iValue(i)
iValue(i) = iValue(K)
iValue(K) = supp
End If
Next i
Text1.Text = Str(iValue(0))
Text2.Text = Str(iValue(1))
Text3.Text = Str(iValue(2))
End Sub


~§~ Sempre E Solo Lei ~§~

Fenomeno85
11-02-2005, 11:55
metodo per quicksort (il migliore tra i due)

te lo metto in c non mi ricordo + come si faceva a far passare gli array


void Quicksort (int iA[], int iInf, int iSup){
int iPer, i,j;
if (iInf < iSup){
iPer = iA[iInf];
i = iInf + 1;
j = iSup - 1;
while (iA[i]<iPer) i++;
while (iA[j]<iPer) j++;
while (i<j){
swap (iA[i], iA[j]);
do{
i++;
} while (iA[i]<iPer);
do{
j--;
} while (iA[i]<iPer);
}
iA[iInf] ) iA[j];
iA[j] = iPer;
Quicksort (iA,iInf,j-1);
Quicksort (iA,j+1,iSup);
}
}


~§~ Sempre E Solo Lei ~§~

carosene
11-02-2005, 12:57
Mille grazie

Fenomeno85
11-02-2005, 13:49
di niente

~§~ Sempre E Solo Lei ~§~