Visualizzazione dei risultati da 1 a 10 su 12

Visualizzazione discussione

  1. #6
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    536
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    Mi riaggancio anche alla risposta di KillerWorm.
    In pratica, diciamo che tu hai questi valori nell'array: 3,6,1,8,4,9,5
    Diciamo che li vuoi ordinare in modo ascendente e quindi definisci la tua funzione in uno dei due modi che hai portato di esempio.
    Andiamo "dietro" alla funzione usort, che usa l'algoritmo QuickSort.
    Più o meno succede così...l'algoritmo usort cerca un "pivot", cioè un valore iniziale da usare poi come "paragone" e, per semplicità, facciamo finta che vada a prendere il valore finale, cioè 5. Questo 5 è "a".
    Ora l'algoritmo prende uno a uno tutti i valori a sinistra e li confronta a 5 in base alla tua funzione: alla funzione arriverà quindi la coppia 5-3. Siccome 3 è inferiore (perchè così stabilisce la tua funzione di confronto), viene lasciato lì dov'è.
    Poi arriva la coppia 5-6. 6 è superiore, quindi viene posizionato a destra e, internamente, l'array è diventato 3,1,8,4,9,5,6
    Poi arriva 5-1 e resta così com'è. Poi 5-8 e siccome 8 è maggiore finisce a destra, e l'array è 3,1,4,9,5,6,8. Poi arriva al 5-9 e trasforma l'array in 3,1,4,5,6,8,9.
    Ora procedo a cercare un nuovo pivot e l'algoritmo sceglie il 4 e lavora sulla parte a sinistra del pivot originale (quindi sui numeri 3,1, e 4). Per "sfiga" in questo ciclo resta tutto uguale. Poi passa a un nuovo pivot da scegliere nella parte sinistra dell'ultimo pivot scelto, e avendo solo due numeri alla fine sposta il 3 a destra, arrivando all'array 1,3,4,5,6,8,9....

    Qualcosa adesso penso di averla afferrata....spero.

    Possiamo dire allora che è la funzione usort che fornisce sia il valore $a e $b prendendoli dall'array $a stesso? Poi a sua volta la funzione cmp fornisce una valore di ritorno

    -1 : 1

    oppure


    return $a <=> $b;

    utili alla funzione usort per mettere in ordine i valori dell'array progressivamente?
    Poi, come si diceva sopra, a noi interessa poco cosa faccia e quale meccanismo utlizzi esattamente usort.

    Ho azzeccato almeno qualcosa nel mio ragionamento?
    Grazie
    Ultima modifica di lucas726; 09-07-2022 a 10:22

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.