栈序算法,C语言代码示例详细解释
1。复杂性和稳定性
时间复杂度算法
最坏情况:O(n^2)
最好情况:O(n)
平均情况:O(n^2)♿
2。是一个栈吗?
堆排序是一种特殊的排序方法。在学习之前,我们需要先了解什么是栈。
堆是一种非线性数据结构。堆可以被认为是一个数组或一个完全二叉树。一般来说,栈是使用完全二叉树结构管理的一维数组。
根据堆的特点,堆可分为大顶堆和小顶堆。
a) 大上栈:每个节点的值都大于或等于左右子节点的值。
b) 小上栈:每个节点的值小于或等于左右子节点的值。
这个功能和我们之前学习搜索时学到的二叉排序树非常相似。这种特殊的数据结构可以让我们快速访问到我们需要的值。例如,优先级队列使用堆进行处理。
PS:这里我们提到的堆概念要和编译器概念堆区分开来。 ?与其子节点类似;这个过程称为堆化过程。如果根节点存储的数最大,则称为大根栈;如果是最小的数,自然就称为小根堆。根据这个特点(大根栈的根最大,小根栈的根最小),可以取出根节点,然后堆叠,再次取出根节点,循环直到最后一个节点。然后下令完成。
基本步骤:
其实所有排序的主要核心就是堆的过程。堆的过程一般是将父节点与其子节点进行比较,交换最大的子节点;但需要注意的是,这些顺序应该相反。首先对子树进行排序,然后逐步上升到排序后的根节点。然后做相反的事情(因为根节点也很小),从根节点到子树排序。最后,所有元素都可以排序。
4。相关代码
请慢慢了解堆栈的特殊排序算法,逐步计算排序循环中的数据。
#include *堆栈, int )lenint 温度; 温度 = 堆[0];❀ ❀ heap[len-1] = 温度;} /* 功能:构建最顶层堆栈 */void❀♽ ♶❀♽ ♽ int ❀♽ ♶❀♽ ♽ ❀♽ ♽ ❀♽❀♽ ♽❀♽ ♽❀♽❀♽❀♽❀♽ int len) { ❀ ❀int i, 温度; 对于 ( i = len/2-1); i >= 0; i--) { if ((2 *i+1) |
a[8 ]= {70 ,50,30,20,10,70,40,60) ;♽ 对于(i = n; i > 0; i--) {
BuildMaxHeap(a, i); ,,}
for (i = 0; i printf "%d", a [i]); }}
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网