# merge sort BEGIN { for (i=0; i<=20; i++) tester(i) tester(1000) } function tester(i) { genid(x,i); sort(x,i); check(x,i); clear(x) gensort(x,i); sort(x,i); check(x,i); clear(x) genrev(x,i); sort(x,i); check(x,i); clear(x) genrand(x,i); sort(x,i); check(x,i); clear(x) } function genid(x,n, i) { for (i=1; i<=n; i++) x[i] = 1 } function gensort(x,n, i) { for (i=1; i<=n; i++) x[i] = i } function genrev(x,n, i) { for (i=1; i<=n; i++) x[i] = n + 1 - i } function genrand(x,n, i) { for (i=1; i<=n; i++) x[i] = int(n * rand()) } function check(x,n, i) { for (i=1; i n) u2 = n while (l1 <= u1 && l2 <= u2) if (A[l1] <= A[l2]) B[++k] = A[l1++] else B[++k] = A[l2++] while (l1 <= u1) B[++k] = A[l1++] while (l2 <= u2) B[++k] = A[l2++] } while (k < n) B[++k] = A[l1++] for (k = 1; k <= n; k++) A[k] = B[k] } }