赞
踩
堆排序原理:
堆的结构类似于完全二叉树,头节点位于整个结构的最上方,每个父节点从左到右依次分岔,延申出两个子节点。
每层节点从左到右在数据中是依次排列的关系。
堆中某个结点的值总是不大于其父结点的值(大顶堆:头节点值最大)。堆中某个结点的值总是不小于其父结点的值(小顶堆:头节点值最小)。
堆排序的基本思想是:1、将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素;2、将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆;3、重复步骤2,如此反复,从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。最后,就得到一个有序的序列了。
#include <stdio.h> #define size 10 void Swap(int *num, int i, int j) { int temp; temp = num[i]; num[i] = num[j]; num[j] = temp; } // 最大堆调整 void Heapify(int *num, int len, int k) { if (k < len) { int root = k; // 根结点 int lchild = 2*k + 1; // 左孩子结点 int rchild = 2*k + 2; // 右孩子结点 // 查找左右孩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。