Code前端首页关于Code前端联系我们

栈序算法,C语言代码示例详细解释

terry 2年前 (2023-09-27) 阅读数 85 #数据结构与算法

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) /*根节点比左子树大*/ TEMP = Stack [i ]; Heap [i] = head [2*i+ 1]; heap[2*i+1] = 温度; /* 检查交换后的左子树是否满足large。堆栈属性。否则,重置子树结构 */ if ((2*(2*i+1)+1 if ((2*i+2) 温度 = stack[i]; / +2)+1     BuildMaxHeap(heap) , len);   }          } }}
int main() { int 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前端网发表,如需转载,请注明页面地址。

热门