예제 #1
0
파일: code.c 프로젝트: Sciumo/pcc
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);
}
예제 #2
0
int delheap(int heapArray[]){

    min=heapArray[1];
    heapArray[1]=heapArray[heapArray[0]--];
    makeheap(heapArray);
    return(min);
}
예제 #3
0
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( ) ;
}
예제 #4
0
파일: 1116.c 프로젝트: 12ashk/etude
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;
}
예제 #5
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);
    }
}
예제 #6
0
파일: sp_2666.cpp 프로젝트: liuq901/code
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);
	}
}
예제 #8
0
파일: HEAPMERG.C 프로젝트: xhbang/C100
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.       */
}
예제 #9
0
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);
}
예제 #10
0
파일: code.c 프로젝트: Sciumo/pcc
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 );
}