Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Ordinamento array - qSort

    Salve a tutti.

    Ho cercato un po' (ma non troppo ) in rete e soprattutto in HTML.it un modo per ordinare un array in VBScript.

    Dalle guide ufficiali non mi risulta esistano funzioni di ordinamento, né ne ho trovate cercando.

    Esiste qualcosa del genere?

    Ad ogni modo, avendo fretta ho scritto una funzione di QuickSort (che mi risulta essere il metodo più efficiente)... se la risposta alla mia precedente domanda è "no" e/o qualcuno è interessato, posso pubblicare il codice, che per altro non è niente di così trascendentale.

    Grazie per l'attenzione

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Benvenuto sul forum

    Ogni apporto alla conoscenza e' sempre il benvenuto, anche se fosse una diversa implementazione di qualcosa gia' esistente (ma non mi sembra questo il caso)

    Piuttosto, poiche' il vbscript e' maggiormante utilizzato in ambito ASP rispetto al browser, ti sposto di forum... per essere piu' visibile e fruibile.

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    no. non esiste alcuna funzione intrinseca di ordinamento array.

  4. #4
    a me interesserebbe...
    filo_2k

  5. #5
    Leggi qui http://forum.html.it/forum/showthrea...hreadid=732815 , non vorrei stessimo parlando della stessa cosa...

    Il codice di questo 3d comunque funziona e come vedi e VBScript.
    Provare paura per un qualcosa che ti possa capitare nel futuro non ti evita quell'evento,ti fa soltanto vivere un presente sbagliato!

  6. #6
    Allora ecco il mio codice. Premetto che POTREBBE contenere qualche bug e SICURAMENTE può essere ottimizzato... insomma l'ho scritto di getto senza andare troppo per il sottile.

    Per ordinare un array (di tipo qualsiasi purché omogeneo e comparabile) bisogna chiamare "qSort":

    Call qSort(MioArray)
    oppure
    qSort MioArray

    Ordina solo in modo crescente (ma non è difficile modificarlo per ordinamenti differenti)

    codice:
    Sub qSort(ByRef aArray)
    	Call IterQSort(aArray, 0, UBound(aArray))
    End Sub
    
    Sub IterQSort(ByRef aArray, iFrom, iTo)
    	Dim iElem, iPivot
    	Dim iCnt, vBuffer
    	iElem = (iTo - iFrom) + 1
    	Select Case iElem
    		Case 1
    			'Do nothing
    		Case 2
    			If aArray(iFrom) > aArray(iTo) Then
    				Call Swap(aArray(iFrom), aArray(iTo))
    			End If
    			'Done.
    		Case Else
    			'Choose Pivot
    			Randomize
    			iPivot = Int(iElem * Rnd + 1)
    			
    			'Move Pivot to first Element
    			Call Swap(aArray(iFrom), aArray(iFrom+(iPivot-1)))
    			
    			'From now with iPivot I mean first element gt the pivot (iFrom)
    			iPivot = iFrom + 1
    
    			'Separate gt from le
    			For iCnt = iFrom+1 to iTo
    				If aArray(iCnt) < aArray(iFrom) Then
    					If iPivot < iCnt Then
    						Call Swap(aArray(iCnt), aArray(iPivot))
    					End If
    					iPivot = iPivot + 1
    				End If
    			Next
    			
    			'Now iFrom -> iPivot-1 are lt iPivot -> iTo
    			If iPivot > iTo Then
    				'All elements are lt iFrom (the pivot)
    				Call Swap(aArray(iFrom), aArray(iTo))
    				Call IterQSort(aArray, iFrom, iTo-1)
    			Else
    				'Recursively sort the two chunk
    				Call IterQSort(aArray, iFrom, iPivot-1)
    				Call IterQSort(aArray, iPivot, iTo)
    			End If
    	End Select
    End Sub
    
    'Swap two values each other
    Sub Swap(ByRef vVar1, ByRef vVar2)
    	Dim vBuffer
    	vBuffer = vVar1
    	vVar1 = vVar2
    	vVar2 = vBuffer
    End Sub
    Bye.

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.