选择排序
2021-02-14 19:17
标签:算法 bre 序列 dex 情况下 -- ret 最小值 完全 选择排序的基本思想是:每一趟从待排序列中选取关键字最小的元素,作为有序序列的一个新的元素,直到待排序列只剩下一个元素,则完成排序。主要算法有简单选择排序和堆排序。 假设序列为L[1...n],第i趟排序从L[i...n]中选择最小的元素与L(i)交换,因此每一趟可以确定一个元素的最终位置,这样经过n-1趟排序可以使得整个序列有序。 堆排序是一种树形选择排序方法,特点是:排序过程中,将序列看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系,每次选择其中的最大(或最小)元素构成有序序列。 在堆排序的过程中,最主要的工作就是调整堆。我们从最后一个结点所在的子树开始筛选(对于大根堆,若根结点关键字小于左右子女中关键字的较大者,则交换),使该子树成为堆。之后向前依次对各结点为根的子树进行筛选,看该结点的值是否大于其左右子节点的值,若不是,则将左右结点中的较大者与之交换,交换后可能会破坏下一级的堆,于是需要继续采用上述方法构造下一级的堆,直到该结点没有子结点为止。重复这个过程,直至达到堆的根结点。 我们首先将调整一棵子树的算法总结出来,用a[0],a[1],...,a[n-1]表示一个堆,故结点a[i]的左孩子结点是a[2i+1],右孩子结点是a[2i+2]。而使用任意左右孩子结点的下标j同样可以获得其父结点,父结点的下标为(j-1)/2。因而我们可以得到以下的算法描述: 有了调整一棵子树的算法,接下来的堆排序就比较简单了,主要有以下步骤: 这里需要注意的是,由于只交换了一个元素,整个堆是整体符合要求的,因此只需要对交换后的首元素进行堆调整就可以了。 选择排序 标签:算法 bre 序列 dex 情况下 -- ret 最小值 完全 原文地址:https://www.cnblogs.com/southernEast/p/12715872.html简述
简单选择排序
算法思想
算法性能分析
C++实现
#include
堆排序
算法思想
算法性能分析
C++实现
#include
下一篇:linux tomcat 启动报错 Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least on