예제 #1
0
파일: sort.cpp 프로젝트: crj0322/common
void HeapSort(int *array, int size)
{
	for (int i = (size-1)>>1; i >= 0; --i)
	{
		AdjustHeap(array, i, size);
	}

	for (int i = size-1; i != 0; --i)
	{
		Swap(&array[0], &array[i]);
		AdjustHeap(array, 0, i);
	}
	
}
예제 #2
0
void CHeapSort::getMax(ModStruct *A, int hLen,int *Node_Rank)
{
	double tempMod;
	int tempNode;
	if(renew==true)
	{
		BuildHeap(A, hLen,Node_Rank);      //建堆 
		tempMod = A[hLen-1].dMod;    //交换堆的第一个元素和堆的最后一个元素
		tempNode = A[hLen-1].node;
		A[hLen-1].dMod = A[0].dMod;
		A[hLen-1].node = A[0].node;
		A[0].dMod = tempMod;
		A[0].node = tempNode;
		//hLen--;        //堆的大小减一
		//AdjustHeap(A, hLen, 0,Node_Rank);  //调堆
		
	}
	else
	{
		/*
		tempMod = A[hLen-1].dMod;    //交换堆的第一个元素和堆的最后一个元素
		tempNode = A[hLen-1].node;
		A[hLen-1].dMod = A[0].dMod;
		A[hLen-1].node = A[0].node;
		A[0].dMod = tempMod;
		A[0].node = tempNode;
		hLen--;        //堆的大小减一
		*/
		AdjustHeap(A, hLen, 0,Node_Rank);  //调堆
	}
}
예제 #3
0
void CHeapSort::BuildHeap(ModStruct *A, int hLen,int *Node_Rank)
{
	int i;
    int begin = hLen/2 - 1;  //最后一个非叶子节点
    for (i = begin; i >= 0; i--)
    {
        AdjustHeap(A, hLen, i,Node_Rank);  
    }
}