散列表 散列表用的是数组支持按照下标随机访问的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,没有数组,就没有散列表。
散列表 散列表用的是数组支持按照下标随机访问的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,没有数组,就没有散列表。
跳表 因为二分查找底层依赖的是数组随机访问的特性,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找算法了吗?只需要对链表稍加改造,就可以支持类似”二分“的查找...
查找第一个大于等于给定值的元素 在有序数组中,查找第一个大于等于给定值的元素。比如,数组中存储的这样一个序列:3,4,6,7,10。如果查找第一个大于等于5的元素,那就是6。...
查找第一个值等于给定值得元素 有序数据集合中存在重复的数据,希望找到第一个值等于给定值的数据。比如下面这样一个有序数组,其中,a[5]、a[6]、a[7]的值都等于8,是重复...
二分查找 假设有1000条订单数据,已经按照订单金额从小到大排序,每个订单金额都不同,并且最小单位是元。现在想知道是否存在金额等于19元的订单。如果存在,则返回订单数据,如果...
基数排序 假设有10万个手机号码,希望将这10万个手机号从小到大排序,有什么比较快速地排序方法呢?快排时间复杂度可以做到O(nlogn),还有更高效的排序算法吗?桶排序、计数...
计数排序 计数排序其实是桶排序的一种特殊情况。当要排序的n个数据,所处的范围并不大的时候,比如最大值是K,就可以把数据划分成K个桶。每个桶内的数据值都是相同的,省掉了桶内排序...
桶排序(Bucket Sort) 桶排序核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据在单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序...
快速排序 快速排序的思想是这样的:如果要排序数组中下标从p到r之间的一组数据,选择p到r之间的任意一个数据作为pivot(分区点)。遍历p到r之间的数据,将小于pivot的放...
归并排序 归并排序的核心思想还是蛮简单的。如果要排序一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就有序了。 归...
选择排序 选择排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。 代码实现如下: 首先...
插入排序 一个有序的数组,往里面添加一个新的数据后,如何继续保持数据有序呢?很简单,只要遍历数组,找到数据应该插入的位置将其插入即可。 这是一个动态排序的过程,即动态地往有序...
冒泡排序 冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动它应该在的位置...
排序算法的执行效率 1.最好情况、最坏情况、平均情况时间复杂度 在分析排序算法的时间复杂度时,要分别给出最好情况、最坏情况、平均情况下的时间复杂度。除此之外,还要说出最好、最...
如何理解”队列“ 队列这个概念非常好理解。可以把它想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。先进者先出,这就是典型的“队列”。栈只支持两个基本操作:入栈pu...
如何理解”栈“ 关于”栈“有一个非常贴切的例子,就是一摞叠在一起的盘子。平时放盘子的时候,都是从下往上一个一个放;取的时候,是从上往下一个一个地依次取,不能从中间任意抽出。后...
单链表反转 链表中环的检测 两个有序链表的合并
链表 相比数组,链表是一种稍微复杂一点的数据结构。这两个非常基础、非常常用的数据结构,常常会放到一块儿来比较。所以先来看,这两者有什么区别。先从底层的存储结构上来看一看。从图...
在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。尽管数组看起来非常基础、简单,但是很多人并没有理解这个基础...
中介模式 中介模式的英文是Mediator Design Pattern。中介模式定义了一个单独的(中介)对象,来封装一组对象之间的交互。将这组对象之间的交互委派给与中介对象...