随笔分类 -  数据结构与算法

摘要:一 B树 1.B树的定义:B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树。 2.B树的特征: 根节点至少有两个子节点 每个中间节点都包含k 阅读全文
posted @ 2019-02-13 09:49 51life 阅读(6890) 评论(0) 推荐(9)
摘要:情景:对数组 int[] arr = {7,10,1,9,2,5,8,6,4 ,3}中的数据 从小到大排序。 思路:选择最右侧的元素3作为枢纽元素,然后从左到右,从下标为0的元素开始与枢纽元素比较,小于枢纽元素不做任何处理,继续比较下一个,直至遇到大于枢纽元素的A元素;同时从右向左,从下标为arr. 阅读全文
posted @ 2019-01-29 10:33 51life 阅读(201) 评论(0) 推荐(0)
摘要:在插入排序中,我们假设在即将进行排序的元素的左侧所有的元素已经是有序的,所以我们会将该元素与它左侧的元素逐个比较,如果左侧的元素大于该元素,则左侧的元素右移。然后,该元素继续与左侧的下一个元素比较。现在有一个问题:极端情况下,刚开始很小的元素放到了最右侧,那么它左侧所有的元素都要向右移动复制一次,这 阅读全文
posted @ 2019-01-28 15:26 51life 阅读(166) 评论(0) 推荐(0)
摘要:情景:对数组 int[] arr = {6,9,5,2,8,7}中的数据 从小到大排序。 思路:在插入排序中,会有一个标记元素,该标记元素左侧的所有元素都是有序的,该元素及其右侧的元素都是无序的。所以在排序中,会将该被标记元素与它左侧的所有元素逐个比较,如果左侧的元素大于等于该被标记元素,则左侧的元 阅读全文
posted @ 2019-01-24 10:23 51life 阅读(175) 评论(0) 推荐(0)
摘要:选择排序对冒泡排序进行了改进,将交换次数从O(n2)降低到了O(n),比较次数仍然是O(n2) 情景:对数组 int[] arr = {6,9,5,2,8,7}中的数据 从小到大排序。 思路:在第一趟排序中,从下标为0开始选择出最小的数字,和arr[0]进行交换,此时,最左侧的数字已经是有序状态了。 阅读全文
posted @ 2019-01-23 13:31 51life 阅读(155) 评论(0) 推荐(0)
摘要:情景:对数组 int[] arr = {6,9,5,2,8,7}中的数据 从小到大排序 思路:从下标为0开始比较,如果arr[0] > arr[1],则交换;否则,不做任何处理。然后同理比较arr[1]和arr[2],,,arr[maxSize-2]和arr[maxSize-1]。经过一轮比较,最大 阅读全文
posted @ 2019-01-22 17:05 51life 阅读(221) 评论(0) 推荐(0)
摘要:1.为什么需要红黑树? 对于二叉搜索树,如果插入的数据是随机的,那么它就是接近平衡的二叉树,平衡的二叉树,它的操作效率(查询,插入,删除)效率较高,时间复杂度是O(logN)。但是可能会出现一种极端的情况,那就是插入的数据是有序的(递增或者递减),那么所有的节点都会在根节点的右侧或左侧,此时,二叉搜 阅读全文
posted @ 2018-07-19 14:06 51life 阅读(8125) 评论(0) 推荐(0)
摘要:我们先了解有序数组和链表两种数据结构:有序数组,可以通过二分查找法快速的查询特定的值,时间复杂度为O(logN),可是插入删除时效率低,平均要移动N/2个元素,时间复杂度为O(N)。链表:查询效率低,平均要比较N/2个元素,时间复杂度O(N),插入和删除效率较高,O(1)。二叉树的特点是结合了有序数 阅读全文
posted @ 2018-07-16 16:05 51life 阅读(4742) 评论(0) 推荐(2)