首页

来自智得网
跳转至: 导航、​ 搜索

精选文章

选择排序查看全文
插入排序流程.png
选择排序中的选择是指在循环过程中每一轮找到最大值,然后把值直接放置在其最终位置的排序方式。

所以选择排序可以认为是冒泡排序的优化过程,都是每一轮找到剩余元素的最大值,但是选择排序在每一轮获取最大值的过程,不会两两交换数据,而是使用一个临时变量存储这个最大值,循环结束之后再将做一次交换,将最大值和位置上当前的值就行交换。 选择排序的流程整体也是分为两轮循环。 因为选择排序每一次循环都可以确认一个最大值的位置,所以n个数字的数据集需要n-1轮才能确认所有数的位置。所以外循环循环n-1次。 每一轮内循环就是寻找数据集中最大值的过程,确认最大值之后将其和其位置上的当前值进行交换,一轮内循环确认一个最大值的位置之后,下一轮内循环只需要将数据集中该位置之前的数据重复该内循环的过程。 例如输入{4,6,8,3,9, 5}将其从小到大排序。 输入的数据集一共是6个数字,所以循环5次可以完成选择排序的过程。 第一轮找出数据集的最大值,可以使用哨兵先将最大值置为第一个数字4,然后向后循环,发现比最大值大的数字就将最大值改写为该值,第一轮循环的时候,最大值是9,该值应该放在数据集最后的位置,所以将9和5交换。 因为9的位置已经确认,所以还剩余5个数字待排序,重复第一轮的循环过程,找出剩余数据的最大值8,将其和目前的第5位的数字5进行交换。 依此类推,将6、5、4、3依次放置在正确的位置。 选择排序的过程是两轮循环,每一轮循环的数据量级是数据规模,所以其时间复杂度是 。 选择排序过程中使用一个变量存储的当前的最大值,数据交换的过程也可能需要一个临时变量,空间复杂度是 。

因为选择排序过程中本轮最大值和其位置上的当前值交换,所以数据本来的顺序可能会打乱…
Lua查看全文
Lua语言的Logo.jpg
Lua 是一种轻量级、高效的脚本编程语言,其设计目标是为了嵌入 C/C++ 程序中,为主机程序提供灵活的扩展性和定制性。Lua 的解释器非常小巧,只有数十 K,可以轻松嵌入到 C/C++ 程序中,而且具有高效、可扩展、可移植等特点,被广泛应用于游戏开发、Web 开发、嵌入式设备控制等领域。。

动态类型 Lua 是一种动态类型的编程语言,这意味着变量的类型在运行时才会被确定,而不是在编译时确定。这与静态类型语言不同,例如 C、Java 等。 在 Lua 中,变量可以随时更改其类型,它的类型会随着其值的类型而变化。这是因为 Lua 中的变量并不是存储在内存中的,而是存储在 Lua 虚拟机的注册表中。 例如,可以将一个变量初始化为字符串类型,然后将其更改为数字类型。下面是一个示例:在 Lua 中,可以使用函数 type 来获取变量的类型。该函数返回一个字符串,表示变量的类型。下面是一些示例:由于 Lua 是一种动态类型的语言,因此可以使代码更加灵活和易于编写。但是,这也可能导致代码中出现类型错误,因为在运行时才会发现这些错误。为了减少这些错误,可以使用类型检查和其他技术来确保代码的正确性。 跨语言调用 Lua是一种轻量级的脚本语言,因其简洁易学、高效、可扩展等特点,被广泛应用于游戏开发、网络编程、嵌入式设备等领域。在实际应用中,Lua通常需要与其他编程语言进行交互,比如C/C++、Java等。 Lua提供了C API来支持与C语言进行交互,而与其他语言的交互,则需要通过跨语言调用实现。跨语言调用的原理基本上都是一样的,即通过一定的方式将不同语言的函数映射到对方的函数上,以实现相互调用。

具体到Lua中,跨语言调用主要有以下两种方式…
InnoDB查看全文
InnoDB整体架构.png
InnoDB引擎设计上借鉴了Oracle数据库的架构,是一个事务安全的存储引擎,其最早有Innobase Oy公司研发,从Mysql 5.5开始就是默认的存储引擎。

Mysql支持行锁,MVCC,一致性非锁定读等特性,是mysql在OLTP应用中首选的存储引擎。 InnoDB引擎的整体架构可以分为几个模块: 线程模型,InnoDB的线程模型较为复杂,有处理请求的IO线程,还有大量定时执行的线程。 内存模型,InnoDB引擎主要的内存区域是Buffer Pool,Buffer Pool同时承担Buffer和Cache的功能,即为读请求提供缓冲,也为写请求提供缓冲区。 存储模型,InnoDB引擎提供了B+树等数据结构作为索引。 事务模型,数据库事务的ACID,InnoDB引擎分别通过以下能力实现: 原子性,通过UndoLog回滚操作实现原子性。 一致性,提供唯一索引,外健等机制进行数据约束。 隔离性,不同的隔离级别实现的方式不同,对于默认的可重复读隔离级别通过MVCC、间隙锁等实现。 持久性,通过RedoLog等机制实现。 线程模型 内存模型 InnoDB存储引擎的持久化数据存在磁盘上,磁盘上记录的数据按照页的方式进行管理,出于性能考虑,InnoDB引擎设计了Buffer Pool(缓冲池),用于缓存磁盘上的数据,同时用于写操作的buffer。 InnoDB引擎对数据库的读写操作,都会首先从磁盘上加载数据到Buffer Pool,对于写操作会先修改Buffer Pool的数据,然后再以一定频率刷到磁盘上。

通常情况下,Cache和Buffer两个词的语义是有差别的,Cache一般是指数据缓存,主要解决的频繁读取热点数据的性能问题…

热门分类

算法题库

精选内容