#include #include #include #define PLUS_INFTY 1000000000 #define MINUS_INFTY -1000000000 typedef struct { int nkey; int *key; } hnode; typedef struct { int p; int n; int N; hnode *node; } heap; int *geninput ( int n ) { int *A, i; A = (int *)malloc(n * sizeof(int)); for (i=0; i0; --j) { for (i=0; i nmax) nmax = H.node[i].key[u]; } pmin = PLUS_INFTY; for (u=0; u= nmax) break; bsort(K,s); for (u=0; u rmax) rmax = H.node[1].key[i]; } return rmax; } heap heapify ( heap H, int i ) { int l, r, c, u, v, s; int nmin, lmax, rmax; int *K; K = (int *)malloc(2 * H.p * sizeof(int)); while (1) { l = 2*i; r = 2*i + 1; if (l > H.N) break; nmin = PLUS_INFTY; for (u=0; u lmax) lmax = H.node[l].key[u]; } rmax = MINUS_INFTY; if (r <= H.N) { for (u=0; u rmax) rmax = H.node[r].key[u]; } } if ((nmin >= lmax) && (nmin >= rmax)) break; c = (lmax >= rmax) ? l : r; s = 0; for (u=0; u= 3) { p = atoi(argv[1]); n = atoi(argv[2]); } else { p = 4; n = 100; } printf("%d\n%d\n", p, n); A = geninput(n); prnarray(A,n); H = initheap(p,n); for (i=0; i=0; --i) { A[i] = getmax(H); H = delmax(H); } printf("\n+++ %d deletions made\n", n); printf("\n+++ Input array sorted\n"); prnarray(A,n); exit(0); }