/* qsort.b */ /* l[] è l'array da riordinare. */ /* p (, ) */ define p (a, z) { auto s, i, c /* Si assume che a sia inferiore a z. */ i=(a+1) c=z /* Inizia il ciclo di scansione dell'array. */ while (1) { while (1) { /* Sposta i a destra. */ if (l[i]>l[a]) { break } if (i>=c) { break } i=(i+1) } while (1) { /* Sposta c a sinistra. */ if (l[c]<=l[a]) { break } c=(c-1) } if (c<=i) { /* È avvenuto l'incontro tra i e c. */ break } /* Vengono scambiati i valori. */ s=l[c] l[c]=l[i] l[i]=s i=(i+1) c=(c-1) } /* A questo punto l[a..z] è stata ripartita e c è la collocazione di l[a]. */ s=l[c] l[c]=l[a] l[a]=s /* A questo punto l[c] è un elemento (un valore) nella posizione giusta. */ return (c) } /* q (, ) */ define q (a, z) { auto c if (z>a) { c = p (a, z) q (a, c-1) q (c+1, z) } return } "Quicksort: l[] t = q (, ) " "Prima riempire l'array l[], poi chiamare la funzione q()."