堆排序O(N*logN)
在给定的数组(乱序),去改变原数组升降序。
1.首先要去建堆。
两个建堆方法:
可以选择向上或者向下建堆
向上建堆,时间复杂度O(N*logN);
void AdjustUp(HDdataTypde* a,int child)//小堆
{
assert(a);
int parent = (child - 1) / 2;
while (child>0)
{
if (a[child] < a[parent])
{
Swap(&a[child], &a[parent]);
child = parent;
parent = (child - 1) / 2;
}
else
{
break;
}
}
}
向下建堆,时间复杂对O(N);
//小堆
void AdjustDown(HDdataTypde* a, int n, int parent)