#define eq(A,B) (!less(A,B)&& !less(B,A)) void quicksort(Item a[],int l,int r) {int i,j,k,p,q;Item v; if (r <=l) return; v=a[r]; i=l-1; j=r; p=l-1; q=r; for(;;) { while (less(a[++i],v)); while (less(v,a[--j])) if (j==l) break; if (i>=j) break; exch(a[i],a[j]); if (eq(a[i],v)) {p++;exch(a[p],a[i]);} if (eq(v,a[j])) {q--; exch(a[q],a[j]);} } exch(a[i],a[r]);j=i-1; i=i+1; for (k=l ; kq;k--,i++) exch(a[k],a[i]); quicksort(a,l,j); quicksort(a,i,r); }