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..
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..
Per caso qualcuno ha un'implementazione dello shear sort che non sia in java?![]()
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
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