java常见算法:
顺序查找,
二分查找,
递归,
冒泡排序,
选择排序,
插入排序。
-
顺序查找 (Linear Search)
- 基本概念:从头到尾逐一检查每个元素,直到找到目标元素或检查完所有元素。
- 时间复杂度:O(n),最坏情况下需要检查所有元素。
- 适用场景:当数据未排序或部分有序时。
-
二分查找 (Binary Search)
- 基本概念:在已排序的数组中,通过不断将搜索范围缩小一半来查找目标元素。
- 时间复杂度:O(log n),最坏情况下需要检查数组的一半。
- 适用场景:当数据已排序时。
-
递归 (Recursion)
- 基本概念:一个函数直接或间接调用自身的过程。
- 适用场景:解决可以分解为更小的子问题的问题,如阶乘、斐波那契数列等。
-
冒泡排序 (Bubble Sort)
- 基本概念:通过重复地遍历待排序的序列,比较相邻的两个元素,若顺序错误则交换它们,直到没有需要交换的元素为止。
- 时间复杂度:O(n^2),最好和最坏情况下都是O(n^2)。
- 适用场景:对小型数据集进行排序或作为其他排序算法的辅助手段。
-
选择排序 (Selection Sort)
- 基本概念:在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。如此反复,直到所有元素均排序完毕。
- 时间复杂度:O(n^2)。
- 适用场景:学习排序算法的基本概念,了解交换排序的思想。
-
插入排序 (Insertion Sort)
- 基本概念:将一个待排序的元素按其关键字的大小插入到已经排好序的有序序列中的适当位置,直到该元素插入到已排序的某个位置为止。
- 时间复杂度:O(n^2),最好和最坏情况下都是O(n^2)。
- 适用场景:在部分有序的数据上进行排序或用于与其他高效算法(如归并排序)结合使用。
以下是常见的排序算法:
- 冒泡排序(Bubble Sort):通过重复地遍历待排序的序列,比较相邻的两个元素,若顺序错误则交换它们,直到没有需要交换的元素为止。
- 选择排序(Selection Sort):在未排序的序列中找到最小(或最大)的元素,存放到排序序列的起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。
- 插入排序(Insertion Sort):将一个待排序的元素按其关键字的大小插入到已经排好序的有序序列中的适当位置。
- 快速排序(Quick Sort):通过选择一个基准元素,将待排序的序列划分为两个子序列,一个子序列中所有元素都小于基准元素,另一个子序列中所有元素都大于基准元素,然后对两个子序列分别递归进行快速排序。
- 归并排序(Merge Sort):将待排序的序列划分为两个子序列,分别对子序列进行排序,然后将排好序的子序列合并成一个有序序列。
- 堆排序(Heap Sort):将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与堆尾元素互换,之后将剩余元素重新调整为大顶堆或小顶堆,以此类推。
- 希尔排序(Shell Sort):通过比较相距一定间隔的元素,将相距较远的元素进行交换,直到整个序列有序为止。
- 计数排序(Counting Sort):对于整数序列,统计每个元素出现的次数,根据出现次数将序列重新排列。
- 桶排序(Bucket Sort):将待排序的元素分配到有限数量的桶子里,然后在每个桶子内进行排序。
- 基数排序(Radix Sort):通过对每个元素的每一位进行比较和排序,从而实现整体有序。
Java 中包含了各种数据结构和算法的实现,这些数据结构和算法是编程中常用的基础工具。下面列举了一些主要的数据结构和常见的算法:
数据结构:
- 数组(Array):最基本的数据结构,用于存储同一类型的元素集合。
- 链表(LinkedList):由一系列节点组成,每个节点包含数据和指向下一个节点的引用。
- 栈(Stack):后进先出(LIFO)的数据结构,只允许在一端进行插入和删除操作。
- 队列(Queue):先进先出(FIFO)的数据结构,只允许在一端插入,在另一端删除。
- 优先队列(PriorityQueue):每个元素都有优先级,优先级最高的元素最先出队。
- 哈希表(HashMap, HashTable):通过哈希函数将键映射到存储位置的数据结构,用于快速查找。
- 树(Tree):一种分层数据结构,包括二叉树、红黑树、B树、B+树等。
- 图(Graph):由节点和边组成的数据结构,用于表示对象之间的关系。
- 堆(Heap):一种特殊的树形数据结构,满足堆属性,常用于实现优先队列。
- 集合(Set):不允许重复元素的集合,如
HashSet
,TreeSet
等。 - 映射(Map):存储键值对的数据结构,如
HashMap
,TreeMap
等。
算法:
- 排序算法:如冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序等。
- 查找算法:如线性查找、二分查找等。
- 图算法:如深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树算法(Prim、Kruskal)等。
- 动态规划:用于解决最优化问题的一种算法思想,如背包问题、最长递增子序列等。
- 分治算法:将大问题分解为小问题来解决的算法,如归并排序、快速排序等。
- 贪心算法:每一步都采取当前最优的选择,从而希望达到全局最优的算法,如活动选择问题、哈夫曼编码等。
- 回溯算法:通过探索所有可能的解来解决问题的算法,如八皇后问题、图的着色问题等。
- 字符串匹配算法:如KMP算法、Boyer-Moore算法等。
- 加密算法:如AES、RSA、SHA-256等。
- 数据压缩算法:如Huffman编码、LZ77、LZ78等。
以上只是Java中常用数据结构和算法的一部分,实际上还有很多其他的数据结构和算法可以根据具体需求进行选择和使用。