53 归档分页
370 留言互动
4 核心专题

最近更新

算法 2021-10-13

选择排序

选择排序把数组划分为已排序和未排序两部分,每轮在未排序区找最小元素并与当前目标位置交换。代码实现中用两层循环,外层 i 为目标索引,内层遍历寻找最小索引 s,最后一次交换即可,已在实现中完成交换次数的优化。时间复杂度与冒泡排序同为 O(n²),但因交换次数少通常更快;若序列已有序度高,冒泡可能更优。选择排序是不稳定的——示例用扑克牌对象演示,同样的键值在不同规则下会改变相对顺序,而冒泡排序保持相对顺序,属于稳定算法。

选择排序 阅读全文
算法 2021-10-13

冒泡排序

冒泡排序通过逐对比较相邻元素并交换,将最大值“冒”到数组末端,重复多轮直至有序。实现思路是外层循环控制轮次,内层比较并在需要时交换,使用布尔变量检测本轮是否有交换以提前结束。代码示例给出简单版和优化版:优化版记录每轮最后一次交换位置,将其作为下一轮的比较上限,当该值为0时直接退出。两版均演示了对数组 `{5,9,7,4,1,3,2,8}` 的排序过程,最终得到有序序列 `[1,2,3,4,5,7,8,9]`。

冒泡排序 阅读全文
算法 2021-10-11

二分查找

二分查找是一种在有序数组中通过不断取中间元素并与目标值比较、收缩左右边界实现的高效搜索算法。基本思路是设定左、右边界 L、R,循环计算中点 M=(L+R)/2(或使用 M=(L+R)>>>1 防止溢出),比较 A[M] 与目标 T,若相等返回索引,若 A[M]<T 则 L=M+1,若 A[M]>T 则 R=M-1,直至 L>R 表示未找到。文中给出 Java 实现并演示排序后查找示例,同时说明了 (L+R)/2 在极端情况下可能导致整数溢出,推荐使用位右移或分拆加法的写法来避免。

二分查找 阅读全文
Java 2021-10-04

List去除重复数据的五种方式

本文介绍了在Java中对ArrayList去重的五种实现方式:①利用LinkedHashSet既去重又保序;②Java 8 Stream的distinct()配合collect;③通过HashSet判断并手动保持顺序;④遍历列表并用contains检测防止重复;⑤使用双层for循环逐一比较并删除。每种方法均附有代码示例并说明其特点。

集合 阅读全文