堆排序:
利用最大堆/最小堆完成排序
用数组存储,但逻辑结构为 完全二叉树
HeapElem arr[] = {45,23,56,34,12,45,67,78,90};
物理结构:
逻辑结构:
arr[end] = 90
start = (end-1)/2=3
tmp = 34
i = 3 (要调整的结点)
j= i*2+1 (左孩子结点)
对 3 7 8 进行判断,已符合最小堆规则 则不调整 break
arr[i] = tmp;
–pos // 开始循环调整 2位置的 while(pos>=0)
普通结构堆排序
#include <stdio.h>
#include <assert.h>
typedef int HeapElem ; // 定义堆排序时数据类型