Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    49

    riordinare array di integer (vb6)

    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.

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Una soluzione potrebbe essere questa. Funziona, ovviamente, solo con
    uno specifico array di interi [Interi()], interno alla tua applica-
    zione. Quindi nel tuo caso devi cambiare 'Interi' con il nome del
    tuo array.

    Con un minimo di modifiche si può rendere generica la funzione e
    riutilizzarla.

    Una soluzione sicuramente più robusta potrebbe essere la codifica
    di un oggetto Sorter che accetti sia interi che stringhe.

    La parte di visualizzazione è solo per la verifica.

    codice:
    Dim i As Integer
    Dim s As Integer
    Dim k As Integer
    
        ' Carico l'array
        For i = 0 To UBound(Interi) - 1
            Interi(i) = Int(Rnd(15) * 50) + 1
        Next i
        
        ' ---------------------------------------------------------
        ' Visualizzo l'array - Da eliminare
        ' ---------------------------------------------------------
        For i = 0 To UBound(Interi) - 1
            Debug.Print Interi(i),
        Next i
        Debug.Print
        ' ---------------------------------------------------------
        
        ' Ordino l'array utilizzando il metodo Exchanging
        Do
            
            s = 0 ' Azzero il contatore scambi
            
            For i = 0 To UBound(Interi) - 1
                ' Confronto gli elementi a coppie 1-2, 2-3, 3-4 ecc...
                If Interi(i) > Interi(i + 1) Then
                    ' Se non sono in sequenza
                    ' Scambio il primo valore col successivo
                    k = Interi(i + 1)
                    Interi(i + 1) = Interi(i)
                    Interi(i) = k
                    s = s + 1 ' Conto gli scambi
                End If
            Next i
            
            ' Si esce quando non ci sono stati scambi (ordinato)
            If s = 0 Then Exit Do
        
        Loop
        
        ' ---------------------------------------------------------
        ' Visualizzo l'array - Da eliminare
        ' ---------------------------------------------------------
        For i = 0 To UBound(Interi) - 1
            Debug.Print Interi(i),
        Next i
        Debug.Print
        ' ---------------------------------------------------------
    Considerazioni sul codice di esempio :
    1) Il codice di esempio indica uno dei probabilmente molti metodi di
    risoluzione del problema.
    2) E' stato provato prima di essere postato.
    3) Non sono inclusi tutti i controlli di validità degli argomenti
    passati alle funzioni, che andranno comunque inseriti nel codice
    dell'applicazione reale.
    4) Il codice riflette, se presenti, le premesse stabilite in testa al
    messaggio di risposta.
    5) Quando è possibile, si propende per una soluzione generalizzata,
    per il riutilizzo del codice.
    Ciao,
    Ciao, Brainjar

  3. #3
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    non sarebbe piu semplice appoggiarsi che ne so ad una listbox ordinarla e poi rimettere il tutto nell'array ????

  4. #4
    Originariamente inviato da cassano
    non sarebbe piu semplice appoggiarsi che ne so ad una listbox ordinarla e poi rimettere il tutto nell'array ????
    no gli elementi per svariati motivi
    1) occupa memoria
    2) gli elementi della listbox sono stringhe e le stringhe si ordinano in modo diverso dai numeri
    3) crei un nuovo handle nella form
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  5. #5
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    bè io direi che il punto 1/3 si puo tralasciare ma il vero problema è il punto 2 nn ci avevo pensato scusate

  6. #6
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    ciao, se gli elementi da ordinare non sono molti allora potrebbe andar bene anche una cosa del genere:
    codice:
    Dim Interi(100) As Integer
    Dim I As Long
    Dim J As Long
    
    Private Sub Ordina()
       Dim tmp As Integer
       For I = 0 To UBound(Interi) - 1
          For J = (I + 1) To UBound(Interi)
             If Interi(I) > Interi(J) Then
                tmp = Interi(J)
                Interi(J) = Interi(I)
                Interi(I) = tmp
             End If
          Next
       Next
    End Sub
    altrimenti ti conviene passare ad un algoritmo più veloce tipo il bouble sort
    Jupy

  7. #7
    Originariamente inviato da cassano
    bè io direi che il punto 1/3 si puo tralasciare ma il vero problema è il punto 2 nn ci avevo pensato scusate
    per la serie basta che funziona
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  8. #8
    Utente di HTML.it L'avatar di cassano
    Registrato dal
    Aug 2004
    Messaggi
    3,002
    bouble sort
    link ?? ci voglio sbattere la testa
    @ xegallo

    anche tu hai ragione

  9. #9
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, il bubble sort è simile a quello che ho postato io, comunque se vuoi degli esempi con l'ordinamento normale, Bubble sort e Quick sort, vai qui: http://www.redangel.it/click_file.asp?m=138&l=2
    Jupy

  10. #10
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Scusa, ma il tuo esempio, nella sostanza, è identico a quello
    che avevo postato io.
    Con la variante che nel tuo esempio esegui un numero di confronti pari sempre al quadrato degli elementi dell'array.
    Con l'algoritmo di Exchanging puro si fanno, in media, molti
    meno confronti.


    Ciao,
    Ciao, Brainjar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.