Esempio n. 1
0
void heapsrt(int a[],int n){
	int i;
	//printf("Entered heapsrt\n");
	for(i=n/2;i>=1;i--){ 	//To build the heap
		maxheapify(a,i);
	}
	//printf("Built heap\n");
	for(i=n;i>=2;i--){
		int temp=a[i];
		a[i]=a[1];
		a[1]=temp;
		a[0]--;
		maxheapify(a,1);
	}
}
Esempio n. 2
0
void buildmaxheap(heap *A)
{
	//builds max heap of the array and sets heapsize to len-1
	A->heapsize = A->len-1;
	int j;
	for(j=(A->len)/2; j>=0; j--)
		maxheapify(A,j);
}
Esempio n. 3
0
void buildmaxheap(int *a,int *left,int *right) 
{
  int i=heapsize/2-1;
    for(;i>=0;i--)
       maxheapify(a,i,left,right);


};
Esempio n. 4
0
void heapsort(){
	i = size/2 - 1;
	while(i >= 0){
		r = i;
		maxheapify();
		i = i - 1;
	}
	i = size - 1;
	r = 0;
	while(size > 0){
		swap = data[0];
		size = size - 1;
		data[0] = data[size];
		data[size] = swap;
		maxheapify();
	}
}
Esempio n. 5
0
void heapsort(int *a)
{int c,i;
 build_max_heap(a);
for(i=10;i>=2;i--)
{c=a[1];
a[1]=a[i];
a[i]=c;
hh=hh-1;
maxheapify(a,1);
}}
Esempio n. 6
0
void heapsort(int A[])//通过建立好的堆,取出A[1]放入尾部来排序
{
	buildheap(A);
	for(int i=N;i>1;i--)
	{
		swap(&A[1],&A[i]);
		N--;
		maxheapify(A,1);		
	}
}
Esempio n. 7
0
struct jobs * Pri_Q_remove()
{
	struct jobs * temp=Pri_Q[1];
	Pri_Q[1]=Pri_Q[Pri_Q_size];
	Pri_Q[Pri_Q_size]=NULL;	
	if(Pri_Q_size>0)
		Pri_Q_size--;
	maxheapify(1);
	return temp;
}
Esempio n. 8
0
int HeapExtractMax(heap *A)
{
	if(A->heapsize<1)
		printf("\nHeap Underflow");
	int max=A->arr[0];
	//heapsize initially set to len-1 in buildmaxheap procedure
	A->arr[0]=A->arr[A->heapsize]; 
	A->heapsize--;
	maxheapify(A,0);
	return max;
}
Esempio n. 9
0
int extract_max(int n,int a[n]){
	if(n<1){
		printf("underflow");
		return -1;
	}
	int max;
	max=a[1];
	a[1]=a[n];
	n=n-1;
	maxheapify(n,a,1);
	return max;
}
Esempio n. 10
0
void maxheapify(int n,int a[n],int i){
	int l,r,max=i;
	l=2*i;
	r=l+1;
	if(l<=n && a[l] >a[i])
		max=l;
	if(r<=n && a[r] >a[l])
		max=r;
	if(max!=i) {
		a[max] = a[i] + a[max] - (a[i] = a[max]);
		maxheapify(n,a,max);
	}
}
Esempio n. 11
0
void heapsort(int arr[], int n)
{
    buildmaxheap(arr, n);
    int i, s = n - 1, t;
    for(i = n - 1; i > 0; i--) {
         t = arr[0];
         arr[0] = arr[i];
         arr[i] = t;
         s = s - 1;
         maxheapify(arr , 0 , s);
    }
    return;
}
Esempio n. 12
0
void heapsort(heap *A)
{
	buildmaxheap(A);
	int i, temp;
	for(i=A->len-1; i>=1; i--)
	{
		temp=A->arr[i];
		A->arr[i]=A->arr[0];
		A->arr[0]=temp;
		A->heapsize--;
		maxheapify(A,0);
	}
}
Esempio n. 13
0
void heapsort(int *a,int left,int right)
{
  int i=8,temp=0;
  buildmaxheap(a,left,right);
  for(i=8;i>=1;i--)
  {
      temp=*(a+i);
      *(a+i)=*a;
      *a=temp;
      heapsize-=1;
      maxheapify(a,0,left,right);
  }

};
Esempio n. 14
0
void maxheapify(int arr[], int i, int s)
{
     int largest, t, l, r;
     l = left(i);
     r = right(i);
     if((l <= s) && (arr[l] > arr[i]))largest = l;
     else largest = i;
     if((r <= s) && (arr[r] > arr[largest]))largest = r;
     if( largest != i) {
         t = arr[i];
         arr[i] = arr[largest];
         arr[largest] = t;
         maxheapify(arr, largest, s);
     }
}
Esempio n. 15
0
void heapsort(int n,int a[n]){
	int i,k=0,j,l,b[n];
	build_heap(n,a);
	j=n;
	b[j]=a[k];
	j--;
	k++;
	for(i=n;i>=2;i--){
		a[i]=a[1]+a[i]-(a[1]=a[i]);
		n=n-1;
		maxheapify(n-1,a,1);
	}
	for(l=1;l<n;l++){
		printf("%d ",a[l]);
	}
}
Esempio n. 16
0
void maxheapify(int A[],int i)
{
	int l,r,largest;
	l=i*2;r=i*2+1;

	if (A[l]>=A[i]&&l<=N)
		largest=l;
	else largest=i;

	if (A[r]>A[largest]&&r<=N)
		largest=r;

	if (largest!=i)
	{
		swap(&A[largest],&A[i]);
		maxheapify(A,largest);
	}
}
Esempio n. 17
0
void maxheapify(heap *A, int i)
{
	int l,r,largest;
	l=2*i+1;
	r=2*i+2;
	if(l<=A->heapsize && A->arr[l] > A->arr[i])
		largest = l;
	else
		largest = i;
	if(r<=A->heapsize && A->arr[r]>A->arr[largest])
		largest = r;
	if( largest!=i )
	{
		int temp=A->arr[i];	
		A->arr[i]=A->arr[largest];
		A->arr[largest]=temp;
		maxheapify(A,largest);		
	}
}
Esempio n. 18
0
void maxheapify(int *a,int i,int *left,int *right)
{
  int l=0,r=0,largest=0,temp=0;
  l=*(left+i);
  r=*(right+i);
  if((l<=heapsize-1)&&(*(a+l)>*(a+i)))
      largest=l;
  else
      largest=i;
  if((r<=heapsize-1)&&(*(a+r)>*(a+largest)))
      largest=r;
  if(largest!=i)
      {
          temp=*(a+i);
          *(a+i)=*(a+largest);
          *(a+largest)=temp;
          maxheapify(a,largest,left,right);
      }
};
Esempio n. 19
0
void maxheapify(int heap[],int i)
{
    int lc = 2*i;
    int rc = 2*i+1;

    int largest = i;
    if(lc<SIZE && heap[lc]>heap[i]){
        largest = lc;
    }
    if(rc<SIZE && heap[rc]>heap[largest]){
        largest = rc;
    }
    if(i!=largest){
        int temp = heap[largest];
        heap[largest] = heap[i];
        heap[i] = temp;
        maxheapify(heap,largest);
    }
}
Esempio n. 20
0
void maxheapify(int *a,int i)
{
  int l;
  int r,k;
  l=2*i;
  r=2*i+1;
  int largest;
  if(a[i]<a[l] && l<=hh)
  largest=l;
  else largest=i;
  if(a[r]>a[largest] && r<=hh)
  largest=r;
  if(largest!=i)
  {
   k=a[i] ;
   a[i]=a[largest];
   a[largest]=k;
  maxheapify(a,largest);
  }
}
Esempio n. 21
0
void maxheapify(int a[],int i){
	//printf("Entered maxheapify\n");
	int left=2*i;
	int right=2*i+1;
	int large=i;
	if (left<=a[0] && a[left]>a[large]){
		large=left;
	}
	if( right<=a[0] && a[right]>a[large] ){
		large=right;
	}
	if(large==i){
		return;
	}
	else{
		int temp=a[i];
		a[i]=a[large];
		a[large]=temp;
		maxheapify(a,large);
	}
}
Esempio n. 22
0
void maxheapify(int pos)
{
	int l=2*pos;
	int r=l+1;
	struct jobs * temp;
	int least;
	
	if((l<=Pri_Q_size) && (Pri_Q[l]->burst[Pri_Q[l]->cur]<Pri_Q[pos]->burst[Pri_Q[pos]->cur]))
		least=l;
	else 	least=pos;
	
	if((r<=Pri_Q_size) && (Pri_Q[r]->burst[Pri_Q[r]->cur]<Pri_Q[least]->burst[Pri_Q[least]->cur]))
		least=r;
		
	if(least!=pos)
	{
		temp=Pri_Q[pos];
		Pri_Q[pos]=Pri_Q[least];
		Pri_Q[least]=temp;
		maxheapify(least);
	}
}
Esempio n. 23
0
void build_max_heap(int *a)
{ int i;
     for(i=5;i>=1;i--)
maxheapify(a,i);
}
Esempio n. 24
0
void buildheap_max(int n,int a[n]){
	int j;
	for(j=n/2;j>=1;j--){
		maxheapify(n,a,j);
	}
}
Esempio n. 25
0
void buildmaxheap(int arr[], int n)
{
     int s = n - 1, i;
     for(i = (n/2) - 1; i >= 0; i--)
          maxheapify(arr, i, s);
}
Esempio n. 26
0
void buildheap(int A[])
{
	for(int i=int(N/2);i>0;i--)//C 里数组从0开始的标记比较忧伤,所以我在数组头加入一个0元素
	maxheapify(A,i);
}