在堆结构上查找前导

时间:2016-05-24 09:43:36

标签: c

这是我工作的代码,我有一个函数原型来构建:              node * pred(int n,node * root)找到前一个 我已经成功建立了堆,但在这里我被卡住了。请保留:D

    #include<stdio.h>
    #include<stdlib.h>

    struct MaxHeap
                 {
                     int size;
                     int* array;
                 };

    PrintArray(int* arr, int size);
    struct MaxHeap* BuildMaxHeap(int* array, int size);
    void HeapSort(int* array, int size);
    void swap(int*a, int*b);
    void MaxHeapify(struct MaxHeap* maxheap,int index);

    int main()
    {
        int arr[] = {12, 11, 13, 5, 6, 7};
        int size = (sizeof(arr))/(sizeof(arr[0]));

        printf("\nGiven array of elements is :\n");
        PrintArray(arr, size);

        HeapSort(arr, size);

        printf("\nThe sorted Array is :\n");
        PrintArray(arr, size);

        return 0;
    }

    PrintArray(int* arr, int size)
    {
        int i ;
        for (i=0; i<size; i++)
            printf("%5d", arr[i]);
        printf("\n");
    }

    void swap(int*a, int*b)
    {
        int t = *a;
        *a = *b;
        *b = t;

    }

    void MaxHeapify(struct MaxHeap* maxheap,int index)
    {
        int largest = index;
        int left = (index <<1) + 1;
        int right = (index+1) << 1;

        if(left < maxheap->size && maxheap->array[left] > maxheap->array[largest])
            largest = left;
        if(right < maxheap->size && maxheap->array[right] > maxheap->array[largest])
            largest = right;
        if(largest != index)
        {
            swap(&maxheap->array[index], &maxheap->array[largest]);
            MaxHeapify(maxheap, largest);
        }
    }

    struct MaxHeap* BuildMaxHeap(int* array, int size)
    {
        int i;
        struct MaxHeap* maxheap = (struct MaxHeap*)malloc(sizeof(struct MaxHeap));
        maxheap->size = size;
        maxheap->array = array;

        for(i= (maxheap->size - 2)/2; i>=0; i--)
            MaxHeapify(maxheap, i);

        return maxheap;
    }

    void HeapSort(int* array, int size)
    {
        struct MaxHeap* maxheap = BuildMaxHeap(array, size);

        while(maxheap->size >1)
        {
            swap(&maxheap->array[0], &maxheap->array[maxheap->size-1]);
            maxheap->size -= 1;

            MaxHeapify(maxheap, 0);
        }


    }

0 个答案:

没有答案