public static void heapsort(int n, int ra[]) {
    int l, j, ir, i;
    int rra;

    l = (n >> 1) + 1;
    ir = n;
    for (;;) {
        if (l > 1) {
        rra = ra[--l];
        } else {
        rra = ra[ir];
        ra[ir] = ra[1];
        if (--ir == 1) {
            ra[1] = rra;
            return;
        }
        }
        i = l;
        j = l << 1;
        while (j <= ir) {
        if (j < ir && ra[j] < ra[j+1]) { ++j; }
        if (rra < ra[j]) {
            ra[i] = ra[j];
            j += (i = j);
        } else {
            j = ir + 1;
        }
        }
        ra[i] = rra;
    }
    }