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); } }
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); //调堆 } }
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); } }