int main(int argc, char *argv[]) { int input; bool isMaxHeap = true, isMinHeap = false; std::printf("Test MaxHeap\n"); Heap <int> MaxHeap(50, isMaxHeap); for (int i = 0; i < 30; i++) { MaxHeap.Push(i*2+3); } std::printf("Top = %d\n", MaxHeap.Top()); for (int i = 0; i < 5; i++) { MaxHeap.Pop(); std::printf("Top = %d\n", MaxHeap.Top()); } std::putchar(10); std::printf("Test MinHeap\n"); Heap <int> MinHeap(50, isMinHeap); for (int i = 0; i < 30; i++) { MinHeap.Push(i*2+3); } std::printf("Top = %d\n", MinHeap.Top()); for (int i = 0; i < 5; i++) { MinHeap.Pop(); std::printf("Top = %d\n", MinHeap.Top()); } return 0; }
int main(int argc, const char * argv[]) { int k; int i; scanf("%d",&k); int *heap = (int* )malloc(k+1); FILE *fp = fopen("data.txt", "r"); for (i = 1; i<=k; i++) { fscanf(fp, "%d ",&heap[i]); } BuildHeap(heap, k); int data; while (fscanf(fp, "%d ",&data) != EOF) { if (data < heap[1]) { heap[1] = data; MaxHeap(heap, 1, k); } } for (i=1; i<=k; i++) { printf("%d ",heap[i]); } printf("\n"); fclose(fp); free(heap); return 0; }
void BuildHeap(int *heap,int len) { if(heap == NULL) return; int index = len / 2; for (int i=index; i>=1; i--) { MaxHeap(heap, i, len); } }
void BuildHeap( heap *pInHeap ) { int nSize = pInHeap->nSize / 2; while( nSize >= 0 ) { MaxHeap( pInHeap, nSize ); nSize--; } }
void HeapSort( heap *pInHeap ) { int nIter = pInHeap->nSize ; while( nIter >= 2 ) { swap( pInHeap->pIn [0], pInHeap->pIn[nIter-1]); pInHeap->nSize--; MaxHeap( pInHeap, 0 ); nIter--; } }
void HeapSort(int *heap,int len) { int i; int size = len; BuildHeap(heap,size); for(i=size-1;i>=1;i--) { swap(heap,0,i); size--; MaxHeap(heap,0,size); } }
void Radio::init(std::string initInfo){ std::string partInfo = ""; songs = MaxHeap(); for(unsigned int i = 0; i < initInfo.length(); ++ i){ if(initInfo[i] == ' '){ songs.currentTime = Time(partInfo); partInfo = ""; }else{ partInfo = partInfo + initInfo[i]; } } songs.setCapacity(std::stoi(partInfo)); // std::cout << "Max songs: " << partInfo << std::endl; // std::cout << "Start time: " << songs.currentTime.stringTime() << std::endl; }
void MaxHeap(int *heap,int i,int len) { int largeIndex = -1; int left = i*2; int right = i*2 + 1; if(left < len && heap[left]>heap[i]) largeIndex = left; else largeIndex = i; if(right <= len && heap[right] > heap[largeIndex]) largeIndex = right; if(largeIndex != i) { swap(heap[i],heap[largeIndex]); MaxHeap(heap, largeIndex, len); } }
void MaxHeap( heap *pInHeap, int idx ) { int nLargest = idx; int nLeft = LEFT( idx ); int nRight = RIGHT( idx ); if( nLeft < pInHeap->nSize && pInHeap->pIn [idx] < pInHeap->pIn[nLeft] ) { nLargest = nLeft; } if( nRight < pInHeap->nSize && pInHeap->pIn[nRight] > pInHeap->pIn [nLargest] ) { nLargest = nRight; } if( idx != nLargest ) { swap( pInHeap->pIn [ idx ], pInHeap->pIn [ nLargest ] ); MaxHeap( pInHeap, nLargest ); } }