排序算法目录:
1.插入排序
2.希尔排序
3.选择排序
4.冒泡排序
5.快速排序
6.计数排序
7.堆排序
图解堆排序:
排升序要建大堆,排降序建小堆。
最大堆:每个父节点的都大于孩子节点。
最小堆:每个父节点的都小于孩子节点。
如图,为大堆排序,那么array[0]即为最大值,将他与array[5]交换。
然后把除最大值20,剩下的数,建立大堆
再把最大值与最后一个数交换(array[0]与array[4])
依次重复以上工作
代码实现:
void HeapSort(int* array, int size)//堆排序
{
for (; size > 0; --size)
{
int i = (size - 2) / 2;
for (; i >= 0; --i)
{
HeapDown(array, i, size);
}
change(&array[0], &array[size - 1]);//交换函数
}
}
void HeapDown(int* array,int i, int size)
{
int parent = i;
int child = parent * 2 + 1;
while (child < size)
{
if (child + 1 < size && array[child]<array[child+1])
{
child += 1;
}
if (array[parent] < array[child])
{
change(&array[parent], &array[child]);
parent = child;
child = parent * 2 + 1;
}
else
return;
}
}