堆排序
void Max_Heapify(int *a, int heap_size, int i)
{
int left = (i<<1) + 1;
int right = (i<<1) + 2;
int largest = i;
while(left<heap_size || right<heap_size)
{
if(left<heap_size && a[largest]<a[left])
{
largest = left;
}
if(right<heap_size && a[largest]<a[right])
{
largest = right;
}
if(i != largest)
{
int temp = a[largest];
a[largest] = a[i];
a[i] = temp;
i = largest;
left = (i<<1) + 1;
right = (i<<1) + 2;
}
else
{
break;
}
}
}
void Build_Max_Heap(int *a, int heap_size)
{
for(int i = heap_size / 2 - 1; i >= 0; i--)
{
Max_Heapify(a, heap_size, i);
}
}
void HeapSort(int *a, int len) //堆排序接口
{
int heap_size = len;
Build_Max_Heap(a,heap_size);
for(int i = len - 1; i>=1; i--)
{
int temp = a[0];
a[0] = a[i];
a[i] = temp;
heap_size--;
Max_Heapify(a, heap_size, 0);
}
}