Ordine alfabetico lento

di il
6 risposte

Ordine alfabetico lento

Ciao a tutti, sono nuovo e spero di fare giusto.
uso visual basic 2008,
ho creato un piccolo programmino che al suo interno ha un doppio ciclo per
ordinare le stringhe di un vettore in ordine alfabetico, e funziona, il problema
è che le il vettore ha circa 250000 componenti, quindi per un fare un ciclo lo fa
velocemente, ma per fare un ciclo dentro ad un altro ciclo vuol dire che deve fare
il "giro" del vettore 250000x250000 volte, e ci mette sui 20 minuti.
volevo chiedervi
se esiste un algoritmo piu semplice in termini di velocità, o qualcosa che comunque
velocizzi.
grazie

i cicli sono questi:

            i = numelem - 1
            j = 0
            While j < numelem - 1
                While i > 0
                    If rime(i) > rime(i - 1) Then
                        appoggio = rime(i)
                        rime(i) = rime(i - 1)
                        rime(i - 1) = appoggio
                    End If
                    i = i - 1
                End While
                i = numelem - 1
                j = j + 1
            End While

6 Risposte

  • Re: Ordine alfabetico lento

    Ciao.
    Io lavoro dal 1998 con VB e dovessi realizzare una cosa come la tua, farei in 2 modi:
    1 - gli elementi in una tabella di un DB come Access e da codice VB, la valorizzerei e l'ordinamento sarebbe istantaneo.
    2 - ho fatto ora una prova, solo con poche righe di codice, e in 2 secondi creo i 250000 elementi, scrivendoli in un file sequenziale-testo e li ordino sfruttando "SORT" del DOS.

    Crea una directory 'C:\comodo'
    In una Form metti un CommandButton e una picturebox....

    es.:
    
    Private Sub Command8_Click()
        Dim N
        
        N = 1
        
        Open "c:\comodo\Output.txt" For Output As #3
            
        Pic1.Cls
        Pic1.Print "Inizio = "; Timer
        Pic1.Refresh
        
        For N = 250000 To 1 Step -1
            Write #3, N
        Next
        
        Close #3
        
        Pic1.Print "Fine = "; Timer
        Pic1.Print "Scritte 250000 numeri/righe"
        Pic1.Refresh
        
        'MsgBox ("Scritte " & N & " righe")
        Shell "c:\comodo\ord1.bat"
    
    End Sub
    
    il file 'Ord1.bat' conterrà:
    Sort < c:\comodo\output.txt > c:\comodo\ordinato.txt

    ti assicuro che in 1 sec vengono ordinati....
  • Re: Ordine alfabetico lento

    Ciao gigidb e lucky..
    @gigidb: credo che se tu sia nella sezione sbagliata (ma chiedo eventuale conferma...)...
    Se stai usando VB 2008... e non VB6, e se ho capito bene il tuo problema... non è possibile usare Array.Sort(tuoarray)?
    Dim gino(5) As String
            gino(0) = "AS"
            gino(1) = "BIS"
            gino(2) = "ASSI"
            gino(3) = "BISSI"
            gino(4) = "TINO"
    
            For Each a As String In gino
                Debug.Print(a)
            Next
    
            Array.Sort(gino)
    
            For Each b As String In gino
                Debug.Print(b)
            Next
    @lucky, perdona l'intervento. Ma credo che ci sia un fraintendimento di versione...

    PS... a dire il vero non vorrei aver frainteso io...
    Buona continuazione.
  • Re: Ordine alfabetico lento

    Ciao.
    Giga... non hai di che scusarti... gli interventi costruttivi, cuore dei forum, sono sempre i benvenuti.
    Non credo che tu ti sbagli, l'amico 'gigi...', ha scritto che stava usando VB 2008 (anche se era un codice da qualsiasi tipo di Basic), quindi, intervento appropriatissimo...
    Se il metodo 'array.sort(...)', che il mio povero VB6 non ha, supporta array di 250.000 elementi, potrebbe andare bene il tuo consiglio, a parte vorrei vedere anche il 'povero' VB 2008, come se la caverebbe in questo sort...?! io ho provato, ma mi si è impallato...! mentre il mio anche se poco ortodosso metodo, fa tutto in circa 2 secondi.
    Saluti.
  • Re: Ordine alfabetico lento

    ...ammetto di non averlo testato.
  • Re: Ordine alfabetico lento

    Ciao a tutti, scusatemi ma credevo che mi arrivasse la mail se qualcuno risponde, forse devo impostarlo. scusatemi.

    comunque il sort di giga mi ha risolto tutto, ora è perfetto.
    grazie a tutti.

    avrei però un'altra domanda da fare:
    non l'ho mai fatto, e sulle guide che ho trovato i code non funzionano, non riesco a esportare dati da excel a VB2008, non ho proprio la sintassi per farlo, voi la sapete?

    grazie in anticipo e scusate per il ritardo
  • Re: Ordine alfabetico lento

    Alla fine ho risolto, lo scrivo per completezza:
    
    Dim objExcel As Object
            Dim objWorkbook As Object
            Dim objWorksheet1 As Object
            objExcel = CreateObject("Excel.Application")
            objWorkbook = objExcel.Workbooks.Open("C:\mio file.xlsx")
            objWorksheet1 = objWorkbook.WorkSheets("foglio1")
            objExcel.Visible = True
            With objWorksheet1
            a(0) = .cells(4, 2).value
    End With
            objWorkbook.Saved = True
            objExcel.Quit()
            objWorksheet1 = Nothing
           objWorkbook = Nothing
            objExcel = Nothing
    
    grazie lo stesso, ciao
Devi accedere o registrarti per scrivere nel forum
6 risposte