算法学习笔记:基础特征、查找与排序方法详解

需积分: 10 0 下载量 168 浏览量 更新于2024-07-16 收藏 914KB DOCX 举报
本资源是一份关于算法学习的初步笔记文档,包含了算法的基本概念、特性、设计原则以及具体实现。以下是主要知识点的详细解析: 1. **算法的特征**: - **有穷性**:算法必须能在有限步内完成,对于任何输入,无论是合法还是非法,最终都会得出结果或终止。 - **确定性**:算法的每一步都有明确的规定,不会出现歧义,总是存在唯一确定的执行路径。 - **可行性**:算法中的操作基于已知的基本操作,可以被转化为有限次的计算。 - **输入与输出**:算法至少需要一个输入,经过处理后会产生一个或多个输出。 2. **算法设计原则**: - **正确性**:首要原则,算法必须按照预期正确地解决问题,确保结果符合问题的定义。 - **可读性**:清晰易懂的代码有助于理解,便于维护和修改。 - **健壮性**:能够处理异常情况,防止程序崩溃。 - **效率与存储**:追求高效的同时,也要考虑内存占用,减少不必要的资源消耗。 3. **示例算法**: - **最大公约数算法**:采用递归方式,通过辗转相除法求解两个非负整数的最大公约数。 - **二分查找法**:一种高效的搜索算法,通过比较中间元素来缩小查找范围。 4. **排序算法**: - **选择排序**:简单直观的排序方法,每次从未排序的部分选择最小(大)元素放到已排序部分的末尾。 - **冒泡排序**:通过反复交换相邻元素,逐步把较大的元素“冒”到未排序部分的末尾。 - **插入排序**:通过构建有序序列,对于未排序数据,在已排序部分找到合适位置插入。 5. **数据结构**: - **栈**:遵循先进后出原则的数据结构,常用在需要后进先出操作的场景,如递归调用、XML解析等。Java中的`Vector`类中的`stack`其实就是一个实现了栈功能的类。 - **队列**: - 定义与操作:遵循先进先出(FIFO)原则,分为单向队列(仅限于在一端进出)和双向队列(允许两端进出)。 - **并发队列**:Java提供多种并发队列,如`ArrayBlockingQueue`、`LinkedBlockingQueue`、`PriorityBlockingQueue`等,用于线程间的通信,有些支持优先级或阻塞机制。 通过这份笔记,学习者已经掌握了算法的理论基础、常见的搜索和排序算法,以及重要数据结构栈和队列的使用。随着后续的学习,将进一步深化理解和应用这些概念和技术。