算法_
hello
DuanJiaNing_
越努力越幸运
展开
-
排序:六. 堆排序(利用堆结构(二叉完全树)的弹出/下沉操作排序)
平均情况、最好情况和最坏情况的时间复杂度都为O(nlog2n),即线性对数复杂度,不稳定的排序算法。 堆结构在 数据结构:二叉完全树(堆) 一文中进行了分析,接下来用代码来实现其几个关键操作:弹出、插入、取顶、上浮、下沉 堆操作实现 这里的实现以小根堆为例: 堆的基本操作接口定义: 弹出方法 弹出时将数组尾元素放到到数组首部,然后对数据首部(根节点)执行下沉操作即可。 插入方法 插入时将新元...原创 2018-12-14 11:05:14 · 547 阅读 · 0 评论 -
数据结构:二叉完全树(堆)
参考文章 堆常用来实现优先队列。 用数组保存数据,而不是链表。 在队列中,操作系统调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。 堆的实现通过构造二叉堆(binary heap),实为二叉树的一种(完全二叉树) 完全二叉树:若设二叉树的深度为h,除第 h ...转载 2018-12-14 10:54:56 · 481 阅读 · 0 评论 -
排序:四. 归并排序(合并两个已经排好序的数组)
是创建在归并操作上的一种有效的排序算法。 平均、最好和最坏时间复杂度都为O(nlog2n)线性对数。是稳定的。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。 归并操作(merge) 也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。 迭代法 申请空间,使其大小为两个已经排序序列之和,该空间用来存...原创 2018-12-13 09:03:29 · 5111 阅读 · 0 评论 -
排序:三. 插入排序(将元素比较插入到前面的位置)
参考文章 时间复杂度O(n2),最好情况O(n),最坏情况O(n2),稳定。(同冒泡) 是一种简单直观的排序算法。适用于量级小于千,或者若已知输入元素大致上按照顺序排列。 插入排序不适合对于数据量比较大的排序应用。 工作原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素(第二个元...原创 2018-12-13 08:58:58 · 479 阅读 · 0 评论 -
排序:二. 直接选择排序(选择剩下的元素里最大(小)放到最后(前))
时间复杂度O(n2),最好情况O(n2),最坏情况O(n2),不稳定。 选择排序(Selection sort)是一种简单直观的排序算法。元素交换次数少,比较占多数。 工作原理如下 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾 以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个...原创 2018-12-13 08:54:55 · 959 阅读 · 0 评论 -
排序:一. 冒泡排序 (前往后所有未排序的元素相邻比较)
系列文章共实现了六种排序算法: 冒泡排序 直接选择排序 插入排序 归并排序 快速排序 堆排序 定义了 Sortable 接口,每种排序方法实现该接口,在 sort 方法中实现排序。 public interface Sortable<T> { /** * 将数组进行排序 * * @param sour 待排序的数组 * ...原创 2018-12-13 08:51:25 · 1002 阅读 · 0 评论 -
排序:五. 快速排序(将“基准”前,后不符合规则的元素交换)
快速排序参考文章:快速排序快速排序(英语:Quicksort) 又称划分交换排序(partition-exchange sort)。图示为使用快速排序对一列数字排序的过程。事实上,快速排序通常明显比其他O(nlog2n)算法更快。因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。复杂度和具体元素交换步骤如下 右图的交换步骤可能不是很清晰,可直接参照下面的java实现理原创 2017-12-26 20:06:45 · 1656 阅读 · 0 评论 -
网易2017春招笔试真题编程题集合——2.优雅的点
网易2017春招笔试真题编程题集合——2.优雅的点原题地址在这里:牛客网题目是这样的: 小易有一个圆心在坐标原点的圆,小易知道圆的半径的平方。小易认为在圆上的点而且横纵坐标都是整数的点是优雅的,小易现在想寻找一个算法计算出优雅的点的个数,请你来帮帮他。 例如:半径的平方如果为25 优雅的点就有:(+/-3, +/-4), (+/-4, +/-3), (0, +/-5) (+/-5,原创 2017-04-10 16:44:25 · 1284 阅读 · 1 评论 -
网易2017春招笔试真题编程题集合——4.消除重复元素
java-注解网易2017春招笔试真题编程题集合——4.消除重复元素题目: 小易有一个长度为n序列,小易想移除掉里面的重复元素,但是小易想是对于每种元素保留最后出现的那个。小易遇到了困难,希望你来帮助他。 原题地址 在这输入描述: 输入包括两行: 第一行为序列长度n(1 ≤ n ≤ 50) 第二行为n个数sequence[i](1 ≤ sequence[i] ≤ 1000),以原创 2017-03-29 13:41:34 · 1916 阅读 · 0 评论 -
网易2017春招笔试真题编程题集合——9.涂棋盘
网易2017春招笔试真题编程题集合——9.涂棋盘题目: 小易有一块n*n的棋盘,棋盘的每一个格子都为黑色或者白色,小易现在要用他喜欢的红色去涂画棋盘。小易会找出棋盘中某一列中拥有相同颜色的最大的区域去涂画,帮助小易算算他会涂画多少个棋格。 原题地址在这里:牛客网输入描述: 输入数据包括n+1行: 第一行为一个整数n(1 ≤ n ≤ 50),即棋盘的大小 接下来的n行每行一个字原创 2017-03-27 22:11:41 · 1100 阅读 · 0 评论