Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219

    [vb6] Algoritmi di ordinamento

    Qualcuno può postare qualche algoritmo di ordinamento performante?

    Al momento sto usando il quicksort ma essendo ricorsivo mangia tante risorse su array da milioni di elementi..

  2. #2
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    Per caso qualcuno ha un'implementazione dello shear sort che non sia in java?

  3. #3

    algoritmo di ordinamento

    Una certa pratica sull'argomento l'ho fatta in GVbasic, in TurboC e anche in VB6.

    Public Sub OrdinaClassifica()
    Dim ii As Integer
    Dim Lavora As Boolean
    Dim ConcX() As Struct ' array-copia delle strutture originali
    Dim conc1 As Struct ' struttura copia-contenitore temporaneo

    ReDim CONCbis(IntMaxInd)
    ReDim ConcX(IntMaxInd)

    For ii = 0 To IntMaxInd - 1
    ConcX(ii) = CONC(ii) ' copia l'array pubblico in quello locale
    Next ii

    Do ' routine ordina strutture
    Lavora = False
    For ii = 0 To IntMaxInd - 1 ' scandisce le strutture originali
    If ii + 1 <= IntMaxInd - 1 Then
    ' 1a chiave discriminante: _________ ordina per PUNTEGGIO ottenuto _____
    If ConcX(ii).Punti(ITrn) < ConcX(ii + 1).Punti(ITrn) Then
    conc1 = ConcX(ii)
    ConcX(ii) = ConcX(ii + 1)
    ConcX(ii + 1) = conc1
    Lavora = True
    End If
    ' 2a chiave discriminante: ___________ ordina per punteggio ELO ________
    If ConcX(ii).Punti(ITrn) = ConcX(ii + 1).Punti(ITrn) And _
    ConcX(ii).ELO < ConcX(ii + 1).ELO Then ' se il giocatore PIU' IN ALTO
    conc1 = ConcX(ii) ' ha un ELO più basso di chi lo segue . . .
    ConcX(ii) = ConcX(ii + 1) ' . . . c'è lo scambio di posizione
    ConcX(ii + 1) = conc1
    Lavora = True
    End If
    ' 3a chiave discriminante: _____________ ordina per CATEGORIA __________
    If ConcX(ii).Punti(ITrn) = ConcX(ii + 1).Punti(ITrn) And _
    ConcX(ii).ELO = ConcX(ii + 1).ELO Then
    'Lavora = True
    End If
    ' 4a chiave discriminante: __________ mette in ordine ALFABETICO _______
    If ConcX(ii).Punti(ITrn) = ConcX(ii + 1).Punti(ITrn) And _
    ConcX(ii).ELO = ConcX(ii + 1).ELO Then
    If ConcX(ii).Cognome = ConcX(ii + 1).Cognome Then
    ' se i cognomi sono uguali ordina i nomi
    If ConcX(ii).Nome > ConcX(ii + 1).Nome Then
    conc1 = ConcX(ii)
    ConcX(ii) = ConcX(ii + 1)
    ConcX(ii + 1) = conc1
    Lavora = True
    End If
    Else ' altrimenti ordina i cognomi
    If ConcX(ii).Cognome > ConcX(ii + 1).Cognome Then
    conc1 = ConcX(ii)
    ConcX(ii) = ConcX(ii + 1)
    ConcX(ii + 1) = conc1
    Lavora = True
    End If
    End If
    End If
    End If
    Next ii
    Loop While Lavora = True ' fine routine ordina strutture

    If Inizio = True Then
    Inizio = False
    If TorneoSvizzero.Value = True Then '________ solo nel sistema svizzero
    For ii = 0 To IntMaxInd - 1
    CONC(ii) = ConcX(ii) '____________ funziona da sorteggio al 1° turno
    Next ii
    End If
    End If

    For ii = 0 To IntMaxInd - 1
    CONCbis(ii) = ConcX(ii) '__________________ per il tabellone-classifica
    Next ii
    End Sub

    Naturalmente questa ruotine ti potrà servire solo come esempio.
    L'ho estratta da un programma che devo ancora finire.
    Se hai domande sono a disposizione ciao. emarvin36
    emarvin

  4. #4
    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

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.