最新回复
最新
精选
排行榜
选择分类
选择标签
话题
参与人员
回复
浏览
活动
基础排序
插入排序
插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理非常类似于我们平时整理扑克牌的过程。
核心思想
将数组分为两个部分:已排序区域和未排序区域。算法每次从“未排序区域”中取出第一个元素,在“已排序区域”中从后往前扫描,找到合适的位置并插入。
具体步骤
从第二个元素开始:第一个元素可以看作已经排好序。
取出当前元素:将当前元素存储到一个临时变量中。
比较与移动:将该元素与它左侧的已排序序列从后往前依次比较。如果左侧元素大于当前元素,就将左侧元素向后移动一位。
插入:找到合适位置后,将当前元素放入该空位。
重复:对数组中的后续元素重复上述步骤,直到整个数组排序完成。
性能分析
时间复杂度:
最坏情况:O(n2)(数组完全逆序时)。
最好情况:O(n)(数组已经是有序的,只需遍历一遍)。
平均情况:O(n2)。
空间复杂度:O(1),因为它是一种原地排序算法,不需要额外的存储空间。
稳定性:它是稳定的,即相等元素的相对位置在排序后不会改变。
优缺点总结
优点:
实现非常简单。
对于小规模数据或者基本有序的数据,插入排序的效率非常高(甚至比快...
技术 & 开发调优
Java
0
1
4.3 12:07
神奇的质数
质数(Prime Number),又称素数,是指在大于 1 的自然数中,除了 1 和 它本身 以外,不能被其他自然数整除的数。
通俗地说,质数就是那种“很硬”的数字,它没办法被拆解成两个更小的数相乘(除了 1 乘以它自己)。
1. 质数的核心特征
必须大于 1:1 既不是质数,也不是合数。
只有两个因数:一个是 1,另一个是它自己。
最小的质数是 2:这也是质数中唯一的一个偶数,其他的质数全部都是奇数。
质数判断法:计算一个数的平方根,从2开始,取小于这个平方根的所有自然数进行取模运算,如果存在循环中出现过模运算结果为0,说明这个数能被其他数字整除,不是质数。
为什么循环到 Math.sqrt(n)(n 的平方根)就停止了?
这是这段代码最聪明的地方(算法优化)。
原理:如果一个数 n 有因数,那么其中一个因数一定小于或等于 sqrt{n},另一个大于或等于 sqrt{n}。
例子:判断 100 是不是质数。
我们不需要从 2 试到 99。
sqrt{100} = 10。我们只需要试到 10。
因为如果你发现 100 不能被 2 到 10 之间的任何数整除,那么它也一定不能被...
技术 & 开发调优
软件开发
0
4
2.28 08:50
Java日常(一)
Java中所有数据类型分为两类:基本类型和引用类型,他们的主要区别是基本类型变量存储实际值,引用类型变量存储数据在内存中的地址(引用);基本类型存储在栈区(stack),引用类型存储在堆区(heap)
不同基本类型数据进行混合运算时,会自动提升(Numeric Promotion),规则如下:
如果其中一个是 double,另一个就会被转成 double。
否则,如果其中一个是 float,另一个就会被转成 float。
否则,如果其中一个是 long,另一个就会被转成 long。
否则,两个操作数都会被转成 int(即使它们原本是 byte 或 short)。
浮点型优先级高于整形
从Java11起,可以直接 java xx.java 直接运行得到结果,不会产生.class文件
Java12引入了switch表达式,和switch语句的区别在于它可以给变量赋值,而不是在case语句中修改变量。case中必须考虑所有情况。
Java有两种修饰符,访问修饰符和非访问修饰符
如果有package包名和import导入,那么package必须在第一行,否则会编译错误
java.lang包...
技术 & 开发调优
Java
0
11
2.27 13:44
Rust-Books
Getting Started
Hello, World!
hello.rs
fn main() {
println!("Hello, world!");
}
rustc generates a binary executable named hello
Hello, Cargo!
We can create a project using cargo new.
We can build a project using cargo build.
We can build and run a project in one step using cargo run.
We can build a project without producing a binary to check for errors using cargo check.
Instead of saving the result of the build in the same directory as our code, Cargo stores it in the target/debug ...
技术 & 开发调优
Rust
0
5
2.4 09:14
日常
日常开发记录
给PoweShell配置代理
设置临时代理,仅当前窗口生效
$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
服务器优先使用ipv4
修改 gai.conf
这种方法不会禁用 IPv6,只是降低 IPv6 的优先级。它是通过修改 getaddrinfo 的配置文件来实现的,对绝大多数应用程序(如 curl, apt, wget)都有效。
编辑配置文件:
Bash
sudo nano /etc/gai.conf
找到以下这一行(通常在第 54 行左右):
Plaintext
#precedence ::ffff:0:0/96 100
取消注释(去掉前面的 #):
Plaintext
precedence ::ffff:0:0/96 100
原理:这一行的意思是将 IPv4 映射地址的优先级设为 100(默认 IPv6 是 40)。
保存并退出:无需重启,立即生效。
技术 & 开发调优
软件开发
Linux
0
5
1.30 09:42
Windows docker端口占用
有时候发现电脑软件打不开,出现端口占用的情况,但是发现端口占用的时候 netstat命令
netstat -ano | findstr :portname 找不到被占用的程序,大概率是因为Hyper-V 端口保留:Windows 系统(由于 Hyper-V 或内核更新)会动态预留几千个端口作为“排除范围”。
解决办法:使用管理员打开cmd或者pwsh
net stop winnat随后net start winnat
技术 & 开发调优
软件开发
0
12
1.27 16:31