Exemple #1
0
/*堆排
	给的数据和以前的最小堆有所不同,
	这次是A[0]中没有哨兵
	所以父亲结点与左儿子结点的关系是 child = parent*2 + 1 
	
 */
void Heap_Sort(ElementType A[],int N)
{
	int i;
	/*??????这里为什么i=N/2-1也是对的呢?????????*/
	for(i=(N-1)/2;i>=0;i--)/*调整为最大堆*/
		PercDown(A,i,N);
	for(i=N-1;i>0;i--){
		Swap(A,A+i); /*A[0](最大值) 与A[i](最小值)*/
		PercDown(A,0,i);/*将A[0]为根,有i个元素的的堆,调为最大堆,*/
	}
}
Exemple #2
0
        void
        Heapsort( ElementType A[ ], int N )
        {
            int i;

/* 1*/      for( i = N / 2; i >= 0; i-- )  /* BuildHeap */
/* 2*/          PercDown( A, i, N );
/* 3*/      for( i = N - 1; i > 0; i-- )
            {
/* 4*/          Swap( &A[ 0 ], &A[ i ] );  /* DeleteMax */
/* 5*/          PercDown( A, 0, i );
            }
        }
Exemple #3
0
void HeapSort( ElementType A[], int N )
{
    int i;
    for( i = N / 2; i >= 0; i-- )
    {
        PercDown( A, i, N );
    }
    for( i = N - 1; i > 0; i-- )
    {
        Swap( &A[ 0 ], &A[ i ] );
        PercDown( A, 0, i );
    }
}
Exemple #4
0
void HeapSort(ElementType A[], int N)
{
	int i;

	/* build heap */
	for (i = N/2; i >= 0; i--) {
		PercDown(A, i, N);
	}
	/* delete max */
	for (i = N - 1; i > 0; i--) {
		Swap(&A[0], &A[i]);
		PercDown(A, 0, i);
	}
}
void HeapSort(ElementTyp A[], int N)
{
	int i;

	for(i = N/2 ; i >= 0; i--)
	{	// 通过下滤建堆
		PercDown(A, i, N);
	}
	for(i = N - 1; i > 0; i--)
	{	// 通过下滤删除最大元素
		Swap(&A[0], &A[i]);
		PercDown(A, 0, i);

		printf("%d  ", A[i]);	// 降序打印数组中元素
	}
}
void heapsort(ElementType A[], int N) {
	Resource_logSpace(SPACE_ELEMENT_INT);

	int i; //1
	for (i = N / 2; i >= 0; i--) { /* BuildHeap *///3
		Resource_logTime(3);
		PercDown(A, i, N);
	}
	for (i = N - 1; i > 0; i--) { //3
		Resource_logTime(3);
		Swap(&A[0], &A[i]); /* DeleteMax */
		PercDown(A, 0, i);
	}
	Resource_logTime(3);
	Resource_logSpace(SPACE_ELEMENT_INT);
}
void BuildHeap( MaxHeap H )
{ /* 调整H->Data[]中的元素,使满足最大堆的有序性  */
  /* 这里假设所有H->Size个元素已经存在H->Data[]中 */
 
    int i;
 
    /* 从最后一个结点的父节点开始,到根结点1 */
    for( i = H->Size/2; i>0; i-- )
        PercDown( H, i );
}
        void
        Heapsort( ElementType A[ ], int N )
        {
            int i;

			PrintArr ( A, N ) ;
			printf ( "Bulid Heap\n" );
/* 1*/      for( i = N / 2; i >= 0; i-- )  { /* BuildHeap */
				printf ( "PercDown %d\n", A[i] ) ;
/* 2*/          PercDown( A, i, N );
				PrintArr ( A, N ) ;
			}
			PrintArr ( A, N ) ;
			printf ( "Sort Operation\n" ) ;
/* 3*/      for( i = N - 1; i > 0; i-- )
            {
/* 4*/          Swap( &A[ 0 ], &A[ i ] );  /* DeleteMax */
				printf ( "After swap( %d, %d )\n", A[ 0 ], A[ i ] ) ;
				PrintArr ( A, N ) ;
				printf ( "PercDown %d\n", A[0] ) ;
/* 5*/          PercDown( A, 0, i );
				PrintArr ( A, N ) ;
            }
        }