八大排序之堆排序

#include <iostream>

using namespace std;

int heapSize = 0;
void HeapSort(int array[], int length);
void BuildMaxHeap(int array[], int length);
void MaxHeapify(int array[], int index);
int GetLeftIndex(int index);
int GetRightIndex(int index);

int main()
{
    int length;
    cin >> length;

    int* pData = new int[length];
    for (int i = 0; i < length; ++i)
        cin >> pData[i];


    HeapSort(pData, length);

    for (int i = 0; i < length; ++i)
        cout << pData[i] << " ";
    cout << endl;

    delete []pData;
    pData=NULL;
    system("pause");
    return 0;
}

void HeapSort(int array[], int length)
{
    if (array == NULL || length <= 0) return;

    BuildMaxHeap(array, length);

    for (int i = length - 1; i >= 1; --i)
    {
        swap(array[0], array[i]);
        heapSize--;
        MaxHeapify(array, 0);
    }
}

void BuildMaxHeap(int array[], int length)
{
    heapSize = length;
    for (int i = ((length-1) >> 1); i >= 0; i--)
        MaxHeapify(array, i);
}

void MaxHeapify(int array[], int index)
{
    int largest = 0;
    int left = GetLeftIndex(index);
    int right = GetRightIndex(index);

    if (left < heapSize && array[left] > array[index])
        largest = left;
    else largest = index;
    if (right < heapSize && array[right] > array[largest])
        largest = right;

    if (largest != index)
    {
        swap(array[index], array[largest]);
        MaxHeapify(array, largest);
    }
}

int GetLeftIndex(int index){ return ((index << 1) + 1); }
int GetRightIndex(int index){ return ((index << 1) + 2); }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章