算法学习
小蚊子爱编程
这个作者很懒,什么都没留下…
展开
-
堆排序
堆是一种完全二叉树,可以用数组的形式表示,如下表所示 左孩子右孩子父节点节点ii * 2 + 1i * 2 + 1 + 1(i - 1) / 2给定一个数组,构造堆(以大根堆——(父节点>子节点,根节点为最大值)为例)对于数组中的每一个元素,比较其与其父节点的大小;若该元素比父节点大,则交换该元素与其父节点位置,直到该元素为根节点或该元素不大于其父节点为止。heapify:假定数组中有一个值...翻译 2018-07-10 23:22:48 · 172 阅读 · 0 评论 -
插入排序
特点:第n次排序之后,前 n+1 像元素有序,稳定思想: 以从小到大排序为例: 从第二个元素开始,依次比较元素 i 与 i 之前的元素 j 的大小,若 i < j,交换 i 与 j 的位置,直到 i 为第一个元素或 i 不小于它之前的元素为止。 最好最坏平均时间复杂度O(n)——待排数组基本有序O(n * n)O(n * n)空间复杂度:O(1)public class Inse...翻译 2018-07-10 23:36:35 · 153 阅读 · 0 评论 -
选择排序
特点:第n此排序,确定第n个位置的元素,不稳定不稳定性说明:如数组[5, 8, 5, 2, 9],第一次排序第一个5和2交换,则两个5的相对位置改变了思想:对于第 n 次排序,设定一个标识用于记录数组中所有未排序元素的最大值(或最小值位置),并将其与数组第 n 个位置的元素互换 最好情况最坏情况平均时间复杂度O(n * n)O(n * n)O(n * n)空间复杂度:O(1)public clas...翻译 2018-07-10 23:46:23 · 136 阅读 · 0 评论 -
快速排序
思想:改进快排,不再总是以最后一个数作为基准,而是随机选取一个数作为基准,将其与最后一个位置互换,再进行快排。public class QuickSort { /** * 若数组为空或仅有一个元素,不用排序,直接返回 * @param arr 需要排序数组 */ public static void quickSort(int[] arr){ ...转载 2018-06-28 23:58:23 · 229 阅读 · 0 评论