技术基础
bernkafly
Talk is cheap ,show me the code
展开
-
原码,反码,补码终于不再傻傻分不清
原码,反码,补码杂谈本文从原码讲起。通过简述原码,反码和补码存在的作用,加深对补码的认识。力争让你对补码的概念不再局限于:负数的补码等于反码加一。接触过计算机或电子信息相关课程的同学,应该都或多或少看过补码这哥仨。每次都是在课本的最前几页,来上这么一段:什么反码是原码除符号位,按位取反。补码等于反码加一。然后给整得莫名其妙,稀里糊涂地,接着就是翻页,反正后面的内容也跟三码没多大关系。我原来也...转载 2019-05-08 22:47:20 · 2343 阅读 · 1 评论 -
算法-插入排序算法(三)
文章目录定义时间复杂度代码实现定义插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为...原创 2019-06-04 22:53:24 · 162 阅读 · 0 评论 -
算法-冒泡排序算法(二)
文章目录定义算法原理时间复杂度代码实现定义重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序...原创 2019-06-04 22:44:20 · 141 阅读 · 0 评论 -
算法-选择排序算法(一)
排序算法也算是面试中的常客了,这段时间想巩固一下排序算法,免得几年工作经验,别人叫手写个快排甚至插入排序都写得磕磕绊绊,那就不太好了。作为排序算法的第一篇,我们还是来介绍一下选择排序算法:文章目录定义时间复杂度《算法》第四版提到的两个特点代码实现定义选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在...原创 2019-06-04 22:31:08 · 232 阅读 · 0 评论 -
算法-快速排序算法(五)
快速排序,emmm,这个取名也太直接了吧。。。总之就是很快咯?!在效率至上的算法里,往往快就是好,来,让我们康康,这个快速排序,到底为什么那么快?快速排序的基本思路快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以...原创 2019-06-10 21:05:18 · 411 阅读 · 0 评论 -
数据结构-树系列之红黑树(五)
红黑树是树的数据结构中最为重要的一种。Java的容器TreeSet、TreeMap均使用红黑树实现。JDK1.8中HashMap中也加入了红黑树。C++ STL中的map和set同样使用红黑树实现。之前的文章已经详细介绍了2-3-4树的性质与操作。本篇文章将从2-3-4树与红黑树关系出发,详细阐明红黑树。 2-3-4树和红黑树是完全等价的,但是2-3-4树的编程实现相对复杂,所以一般是通过实现...原创 2019-06-04 09:29:03 · 301 阅读 · 0 评论 -
算法-希尔排序算法(四)
大家端午节安康,这两天都忙着玩了。没什么时间写技术博客。不过定好的计划一定要努力完成。这次给大家介绍一下希尔排序算法,其实这是建立在插入排序之上的一种排序算法。当然,作为一个程序员,我们听到诸如:“建立在XX之上”,“是XXX的改进版”,“继XXX后,XXXX横空出世”这些句子,本能会思考旧东西的缺点,新东西的优点,新东西解决了旧东西什么问题。那么插入排序有什么问题呢?文章目录插入排序之殇希尔...原创 2019-06-09 20:55:24 · 779 阅读 · 0 评论 -
数据结构-树系列之2-3,2-3-4树(红黑树前置知识)(四)
前面讲到了二叉搜索树(BST)和二叉平衡树(AVL),二叉搜索树在最好的情况下搜索的时间复杂度为O(logn),但如果插入节点时,插入元素序列本身就是有序的,那么BST树就退化成一个线性表了,搜索的时间复杂度为O(n)。 如果想要减少比较次数,就需要降低树的高度。在插入和删除节点时,要保证插入节点后不能使叶子节点之间的深度之差大于1,这样就能保证整棵树的深度最小,这就是AVL树解决BST搜索性...原创 2019-06-03 10:06:29 · 529 阅读 · 0 评论 -
数据结构-树系列之平衡二叉树(三)
前文也提到了,二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序,例如序列A = {1,2,3,4,5,6},构造二叉搜索树如图3.1。依据此序列构造的二叉搜索树为右斜树,同时二叉树退化成单链表,搜索效率降低为O(n)。所以二叉搜索树的效率跟树的形态密切相关!在此二叉搜索树中查找元素6需要查找6次。二叉搜索树的查找效率取决于树的高度,因此保持树的高度最小,即可保证树的查找效率。同样的序列A...原创 2019-05-29 21:00:05 · 462 阅读 · 0 评论 -
数据结构-树系列之二叉搜索树(二)
二叉树的基本概念与定义在前文中已经介绍过了,那么此后的几篇文章开始着重于二叉树的实际运用,现在先介绍一篇二叉搜索树,见名知意,此树肯定是用在搜索查找的场景啦。文章目录二叉搜索树定义性质创建二叉搜索树查找查找过程插入插入过程图解过程代码实现删除删除节点为叶子节点删除的节点只有左子树删除的节点只有右子树删除的节点既有左子树又有右子树代码实现:二叉搜索树定义二叉搜索树又称二叉查找树,亦称为二叉排...原创 2019-05-29 09:11:53 · 432 阅读 · 0 评论 -
数据结构-树系列之基础(一)
数据结构系列正式进入树的专题!鼓掌~毫不夸张的说,树乃是数据结构中最重要的一环,太多的地方需要用到树,前面的链表与数组仅仅是一种线性的存储结构,而树则立体了起来。那么,什么是树呢?文章目录树的基础概念什么是树节点的度节点关系节点层次树的深度二叉树二叉树定义二叉树描述多叉树二叉树特点二叉树性质满二叉树(完美二叉树)二叉树的存储结构数组存储结构链表存储结构重难点:二叉树遍历前序遍历中序遍历后序遍历...原创 2019-05-27 22:57:05 · 387 阅读 · 0 评论 -
数据结构-数组Array进阶攻略
数组是非常基础的数据结构,本文准备从数组自身与java的Arrays工具类源码来分析数组:数组特点1:长度固定2:数组是相同数据类型的有序集合3:数组也是对象(属于引用类型)初始化数组:1.静态初始化简化格式:数据类型[] 数组名称 = {值, 值, …};int[] arr={1,2,3,6};完整格式(推荐):数据类型[] 数组名称 = new 数据类型[]{值, 值, ...原创 2019-05-13 23:45:38 · 250 阅读 · 0 评论 -
数据结构-链表进阶攻略(半成品)
链表和数组都算是比较底层的数据结构,与快速查找的数组不同,链表更适合插入与删除。文章目录链表基本概念单向链表双向链表常见的链表算法题:链表基本概念单向链表/** * 单向链表 * 当前结点只存储了后续结点引用,相对双向链表而言,空间复杂的较好。 */public class Linked<E> { private static class Node<E&...原创 2019-05-14 21:13:44 · 243 阅读 · 0 评论 -
数据结构-Queue系列之ArrayDeque(一)
这段时间暂时不写关于各种框架的博客了。因为自己是非科班出生,所以想的还是先从根基抓起,目前在学大学的计算机基础课,计算机网络,操作系统那些比较偏理论,而数据结构和算法有很大的关系,所以单单做一些数据结构方面的笔记。首先就来看看队列,queue。最最最基本的概念:队列是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)...原创 2019-05-09 20:26:06 · 397 阅读 · 1 评论 -
算法-归并排序算法(六)
大家好啊,好久没写博客了,主要是前段时间比较忙,很抱歉很久都没更新了。是时候更新了~上次讲了快排,这次讲一讲归并排序。首先在正片前多说两句,归并排序用的还是蛮多的,在JAVA API中,归并排序一度是默认的排序方式,当然实际上JAVA里是分了很多种情况考虑的,以Array的sort()为例,当数组长度小于某个值时,其实使用的是插入排序。其他的还有一些判断,在写完排序算法后,我会分析一下JAVA ...原创 2019-06-27 11:54:15 · 177 阅读 · 0 评论