企业网站建设的基本标准,网站是如何优化的,wordpress专业开发指南,企业推广宣传方式排序算法之---堆排序#xff08;很重要的一个结构#xff0c;新手入门必备#xff09;先来简单的介绍一下堆结构#xff1a;
堆排序是利用堆这种数据结构而设计的一种排序算法#xff0c;堆排序是一种选择排序#xff0c;它的最坏#xff0c;最好#xff0c;平均时间复…排序算法之---堆排序很重要的一个结构新手入门必备先来简单的介绍一下堆结构
堆排序是利用堆这种数据结构而设计的一种排序算法堆排序是一种选择排序它的最坏最好平均时间复杂度均为O(nlogn)它是不稳定排序。首先简单了解下堆结构。堆是具有以下性质的完全二叉树
每个结点的值都大于或等于其左右孩子结点的值称为大顶堆
每个结点的值都小于或等于其左右孩子结点的值称为小顶堆。
如下图大根堆和小根堆在数组中的特点如下大顶堆arr[i] arr[2i1] arr[i] arr[2i2] i是指父节点2i1是子节点
小顶堆arr[i] arr[2i1] arr[i] arr[2i2] 下面就来介绍一下堆排序的基本思想和步骤
堆排序的基本思想是将待排序的序列构造成一个大顶堆1此时整个序列最大值就是堆顶的根节点。将其与末尾元素进行交换此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆2这样会得到n个元素的次小值。如此反复执行便能得到一个有序序列了3
1将待排序的序列构造成一个大根堆
将数组一个一个插入大根堆中当插入的元素比起父节点大的时候与父节点交换并且将父节点的索引赋值给子节点不断地 往上递归上去比较。
举个粟子当插入9的时候比较完发现9还比交换后的父节点大那就还要继续交换了。2构成大根堆之后此时整个序列最大值就是堆顶的根节点。将其与末尾元素进行交换此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆。
54~58这几行表示的是这个时候就要将较大的子节点与父节点进行比较了如果子节点更大的话那就交换父节点和子节点
59~60行这里则表示当子节点比其父节点还大的时候交换它们两个的位置同时将index指针往下传继续判断是否有比父节点还大的子节点。参考https://www.cnblogs.com/chengxiao/p/6129630.html这篇博文写的很清晰只是不同的是大根堆的形成不是很相同。可以参考很详细。