堆排序

#include<iostream>
#include<cstdio>
using namespace std;

void swap(int a[], int x, int y)
{
    int temp = a[x];
    a[x] = a[y];
    a[y] = temp;
}

void heapInsert(int a[], int index)
{
    while(a[index] > a[(index) / 2])
    {
        swap(a, index, (index) / 2);//新插入的節點與父節點比較大小
        index = (index - 1) / 2;
    }
}

void heapify(int a[], int index, int heapSize)
{
    int left = index * 2 + 1;
    while(left < heapSize)
    {
        int largest = left + 1 < heapSize && a[left + 1] > a[left] ? left + 1 : left;
        largest = a[largest] > a[index] ? largest : index;
        if(largest == index)
        {
            break;
        }
        swap(a, largest, index);
        index = largest;
        left = index * 2 + 1;
    }
}

void heapSort(int a[], int heapSize)
{
    for(int i = 0; i < sizeof(a); i++)
    {
        heapInsert(a, i);
    }
    while(heapSize > 0)
    {
        swap(a, 0, heapSize--);
        heapify(a, 0, heapSize);
    }
}

int main()
{
    int a[10] = {8, 2, 4, 9, 0 ,7, 6, 1, 5, 4};
    heapSort(a, 9);
    for(int i = 0; i < 10; i++)
    {
        cout << a[i] << " ";
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章