堆排序 heap sort
void Print(int arr[], int size)
{
if(NULL != arr)
for(int i = 0; i < size; ++i)
cout << arr[i] << ' ';
cout << endl;
}
void MaxHeapify(int arr[], int idx, int size)
{
int max;
while(idx*2 + 1 < size)
{
max = idx*2 + 1;
if(idx*2 + 2 < size && arr[max] < arr[idx*2 + 2])
max = idx*2 + 2;
if(arr[idx] >= arr[max])
break;
else
{
swap(arr[idx], arr[max]);
idx = max;
}
}
}
void BuildHeap(int num[], int size)
{
for(int i = size/2 - 1; i >= 0; --i)
MaxHeapify(num, i, size);
}
void HeapSort(int num[], int size)
{
BuildHeap(num, size);
for(int i = size - 1; i >= 1; --i)
{
swap(num[i], num[0]);
--size;
MaxHeapify(num, 0, size);
}
}
int main()
{
int data[13]={8,5,4,6,13,7,1,9,12,11,3,10,2};
HeapSort(data,13);
Print(data, 13);
int data3[1]={8};
HeapSort(data3,1);
Print(data3, 1);
int data2[5]={1, 2, 3, 4, 5};
HeapSort(data2,5);
Print(data2, 5);
int data1[5]={8,5,4,6,13};
HeapSort(data1,5);
Print(data1, 5);
HeapSort(NULL, 0);
return 1;
}