Algorithm&Data-Structure
G0_hw
路漫漫其修远兮,吾将上下而求索
https://github.com/Go007/
https://gitee.com/hong_007/projects
展开
-
排序(七):堆排序
一. 堆是什么堆树的定义如下:(1)堆树是一颗完全二叉树;完全二叉树:除了最后一层,其他层的节点个数都是最大值,即 2^N,N为层数,根节点为0;且最后一层自左向右的节点是连续的(2)堆树中某个节点的值总是不大于或不小于其孩子节点的值;(3)堆树中每个节点的子树都是堆树。当父节点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父节点的键值总是小于或等于任何一个子节点的键值时为最...原创 2019-11-27 18:17:58 · 190 阅读 · 0 评论 -
排序(五):归并排序法
一. 基本思想二. 版本1package com.hong.sort;import java.util.Arrays;/** * 归并排序 O(Nlog(N)) * 需要将当前的数组拷贝一份出来,因此相比之前的排序,需要更多的存储空间 */public class MergeSort { /** * 将arr[l...mid]和arr[mid+1......原创 2019-11-20 22:10:46 · 308 阅读 · 0 评论 -
排序(六):快速排序法
一. 基本思想在归并排序中,不管数组的内容是什么,直接将数组一分为二,不断归并;而快速排序则每次从当前数组中选择一个元素作为标定点,然后想办法将这个标定点挪到合适的位置,使其满足上图中所示的排列,然后再从两端继续进行上述操作,直到整个数组有序。快速排序中的核心操作就是对数组进行分区。假设我们每次选择数组的首元素作为标定点,即上图中的 l 位置对应的元素 v,j 是 <v 部分的末尾...原创 2019-11-19 23:11:48 · 261 阅读 · 0 评论 -
排序(四):希尔排序法
希尔排序是插入排序的改进版,实现简单,对于中等规模数据集的性能表现还不错。基本思想首先它把较大的数据集合分割成若干个小组(逻辑上分组),然后对每一个小组分别进行插入排序,此时,插入排序所作用的数据量比较小(每一个小组),插入的效率比较高。时间复杂度希尔排序的复杂度和增量序列是相关的。{1,2,4,8,…}这种序列并不是很好的增量序列...原创 2019-11-06 22:09:58 · 221 阅读 · 0 评论 -
排序(三):插入排序法
/** * <br>插入排序</br> * 对比选择排序 com.hong.sort.SelectionSort * 插入排序可以提前终止比较,而选择排序为了每次在剩下的元素中找到最小值, * 不得不把当前元素与剩下未排序的元素挨个比较,没有提前终止的机会, * 所以理论上插入排序的效率要高于选择排序。 */public class InsertionSort...原创 2019-11-06 21:20:01 · 212 阅读 · 0 评论 -
排序(二):冒泡排序法
/** * <br>冒泡排序</br> */public class BubbleSort { /** * 外层循环控制比较的轮数,内层循环进行依次相邻元素的比较 * 在第一轮比较中,最大的元素冒泡到了最后的位置; * 在第二轮比较中,第二大的元素冒泡到了倒数第二个位置; * 依此类推。 * @param a...原创 2019-11-05 23:25:02 · 157 阅读 · 0 评论 -
排序(一):选择排序法
/** * <br>选择排序</br> * O(n^2) */public class SelectionSort { /** * 选择排序思想: * 从第一个位置开始,找到后面最小的元素,然后与第一个位置的元素交换, * 这样,第一个位置的元素就是最小的元素了; * 然后从第二个位置开始,依次重复上面的步骤。 ...原创 2019-11-05 22:26:25 · 200 阅读 · 0 评论 -
动态规划
一.什么是动态规划动态规划(Dynamic Programming)是一种分阶段求解决策问题的数学思想。一般包含三个重要的概念:最优子结构,边界,状态转移公式。总结起来就是一句话:大事化小,小事化了。二. 题目:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。比如,每次走1级台阶,一共走10步,这是其中一种走法。我们可以简...原创 2018-11-19 23:45:22 · 162 阅读 · 0 评论