コード例 #1
0
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;
}
コード例 #2
0
ファイル: main.c プロジェクト: Pikdays/DailyLearningCode
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;
}
コード例 #3
0
ファイル: main.c プロジェクト: Pikdays/DailyLearningCode
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);
    }
}
コード例 #4
0
void BuildHeap( heap *pInHeap )
{
    int nSize = pInHeap->nSize / 2;
    while( nSize >= 0 )
    {
        MaxHeap( pInHeap, nSize );
        nSize--;
    }
}
コード例 #5
0
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--;
    }
}
コード例 #6
0
ファイル: seqheapsort.c プロジェクト: Ysan521/AlgorithmCode
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);
	}
}
コード例 #7
0
ファイル: Radio.cpp プロジェクト: rukumar333/cs240
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;
    
}
コード例 #8
0
ファイル: main.c プロジェクト: Pikdays/DailyLearningCode
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);
    }
}
コード例 #9
0
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 );
    }
}