Exemplo n.º 1
0
/****************** heap sort *****************/
void heapsort(T* arr, int n) {
    if (arr = nullptr) return;
    for (int i = n / 2; i >= 0; --i) { // 首先要建立最大堆
        perc_down(arr, i, n);
    }
    for (int i = n - 1; i > 0; --i) {
        swap(arr, arr + i); // 将最大值移到数组末尾
        perc_down(arr, 0, i - 1); // 现在arr[0]为一个新的值,需要进行下推
    }
}
Exemplo n.º 2
0
void heapsort(TAsoc a[], int n) {
  int i, j;
  j = n;
  for (i=n/2; i>0; i--)  /* BuildHeap */
    perc_down(a,i,j);
  i = 1;
  for (j=n; j>=2; j--) {
    swapItem(&a[i],&a[j]);   /* DeleteMax */
    perc_down(a,i,j-1);
  }
}
Exemplo n.º 3
0
void delete_min()
{
	min_heap();
	a[1]=a[hsize];
	hsize--;
	perc_down(1);
}
Exemplo n.º 4
0
void perc_down(int i)
{
	int small,l,r;
	struct node temp;
	small=i;
	l=2*i;
	r=2*i+1;
	if(l<=hsize)
	{
		if(comp(a[l],a[i])==-1) small=l;
	}
	if(r<=hsize)
	{
		if(comp(a[r],a[small])==-1) small=r;
	}
	if(small!=i)
	{
		temp=a[i];
		a[i]=a[small];
		a[small]=temp;
		perc_down(small);
	}
}