makeheap(register struct sw *p, int m, int n) { register int q; q = select(m); heapsw[n] = p[q]; if( q>1 ) makeheap(p, q-1, 2*n); if( q<m ) makeheap(p+q, m-q, 2*n+1); }
int delheap(int heapArray[]){ min=heapArray[1]; heapArray[1]=heapArray[heapArray[0]--]; makeheap(heapArray); return(min); }
void main( ) { int arr [20] = { 1000, 7, 10, 25, 17, 23, 27, 16, 19, 37, 42, 4, 33, 1, 5, 11 } ; int i, n = 15 ; clrscr( ) ; makeheap ( arr, n ) ; printf ( "Heap:\n" ) ; for ( i = 1 ; i <= n ; i++ ) printf ( "%d\t", arr [i] ) ; i = 24 ; add ( i, arr, &n ) ; printf ( "\n\nElement added %d.\n", i ) ; printf ( "\nHeap after addition of an element:\n" ) ; for ( i = 1 ; i <= n ; i++ ) printf ( "%d\t", arr [i] ) ; i = replace ( 2, arr, n ) ; printf ( "\n\nElement replaced %d.\n", i ) ; printf ( "\nHeap after replacement of an element:\n" ) ; for ( i = 1 ; i <= n ; i++ ) printf ( "%d\t", arr [i] ) ; i = del ( arr, &n ) ; printf ( "\n\nElement deleted %d.\n", i ) ; printf ( "\nHeap after deletion of an element:\n" ) ; for ( i = 1 ; i <= n ; i++ ) printf ( "%d\t", arr [i] ) ; getch( ) ; }
int main(void) { int n;//number of data int i, j; printf("input number of data: "); scanf("%d", &n); makeheap(n); hsort(n-1); return 0; }
void vheapsort(int s[], int n) { int i=n-1; int temp; makeheap(s, n); for(;i>=1;i++){ temp=s[i]; s[i]=s[0]; s[0]=s[i]; fixdown(s,--n,0); } }
void buildheap(int t) { void add(int,int,int,int,int),makeheap(int); int p,q,time; if (g[t][0]==-1) return; p=a[g[t][0]][0]; q=a[g[t][0]][3]; time=g[t][2]; com=0; g[t][3]=head+1; add(p,q,time,h[0][time+1][p],0); g[h[0][time+1][p]][6]=head+1; makeheap(time+1); g[h[0][time+1][p]][7]=head; com=0; g[t][4]=head+1; g[h[0][time+1][q]][6]=head+1; add(q,p,time,h[0][time+1][q],0); makeheap(time+1); g[h[0][time+1][q]][7]=head; }
void heapsort(char a[100][100],int n) { int i; char temp[100]; makeheap(a,n); for (i = n; i >= 2; i--) { strcpy(temp,a[1]); strcpy(a[1],a[i]); strcpy(a[i],temp); heapsize--; maxheap(a,1); } }
void prepare(int matrix[][MAXSIZE], int m, int n) { int i; heap = (int *) malloc(sizeof(int)*(m+1)); location = (int *) malloc(sizeof(int)*(m+1)); index = (int *) malloc(sizeof(int)*m); file_no = m; file_len = n; for (i = 1; i <= file_no; i++) { /* use 1st item */ heap[i] = matrix[i-1][0]; /* to build up the*/ location[i] = i - 1; /* working heap. */ index[i-1] = 1; /* next item pointer to seq.*/ } makeheap(); /* build up the heap. */ }
heapsort(){ printf("Enter the value of num \n"); scanf("%d",&num); heapArray[0]=num; printf("enter the values one by one \n"); for(i=1;i<=num;i++){ scanf("%d",&heapArray[i]); } makeheap(heapArray); for(i=1;i<=num;i++){ printf("%d ",heapArray[i]); } printf("\n"); while(heapArray[0]>0){ printf("%d",delheap(heapArray)); // printf("\n"); // delheap(heapArray); } return(0); }
genswitch(register struct sw *p, int n) { /* p points to an array of structures, each consisting of a constant value and a label. The first is >=0 if there is a default label; its value is the label number The entries p[1] to p[n] are the nontrivial cases */ register i; register CONSZ j, range; register dlab, swlab; range = p[n].sval-p[1].sval; if( range>0 && range <= 3*n && n>=4 ){ /* implement a direct switch */ swlab = getlab(); dlab = p->slab >= 0 ? p->slab : getlab(); /* already in r0 */ printf(" casel r0,$%ld,$%ld\n", p[1].sval, range); deflab1(swlab); for( i=1,j=p[1].sval; i<=n; j++) { printf(" .word " LABFMT "-" LABFMT "\n", (j == p[i].sval ? ((j=p[i++].sval), p[i-1].slab) : dlab), swlab); } if( p->slab >= 0 ) branch( dlab ); else deflab1(dlab); return; } if( n>8 ) { /* heap switch */ heapsw[0].slab = dlab = p->slab >= 0 ? p->slab : getlab(); makeheap(p, n, 1); /* build heap */ walkheap(1, n); /* produce code */ if( p->slab >= 0 ) branch( dlab ); else deflab1(dlab); return; } /* debugging code */ /* out for the moment if( n >= 4 ) werror( "inefficient switch: %d, %d", n, (int) (range/n) ); */ /* simple switch code */ for( i=1; i<=n; ++i ){ /* already in r0 */ printf( " cmpl r0,$" ); printf( CONFMT, p[i].sval ); printf( "\n jeql " LBLFMT "\n", p[i].slab ); } if( p->slab>=0 ) branch( p->slab ); }