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); } }
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); }
void buildmaxheap(int *a,int *left,int *right) { int i=heapsize/2-1; for(;i>=0;i--) maxheapify(a,i,left,right); };
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(); } }
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); }}
void heapsort(int A[])//通过建立好的堆,取出A[1]放入尾部来排序 { buildheap(A); for(int i=N;i>1;i--) { swap(&A[1],&A[i]); N--; maxheapify(A,1); } }
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; }
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; }
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; }
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); } }
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; }
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); } }
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); } };
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); } }
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]); } }
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); } }
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); } }
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); } };
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); } }
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); } }
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); } }
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); } }
void build_max_heap(int *a) { int i; for(i=5;i>=1;i--) maxheapify(a,i); }
void buildheap_max(int n,int a[n]){ int j; for(j=n/2;j>=1;j--){ maxheapify(n,a,j); } }
void buildmaxheap(int arr[], int n) { int s = n - 1, i; for(i = (n/2) - 1; i >= 0; i--) maxheapify(arr, i, s); }
void buildheap(int A[]) { for(int i=int(N/2);i>0;i--)//C 里数组从0开始的标记比较忧伤,所以我在数组头加入一个0元素 maxheapify(A,i); }