1. Java基础算法
1.1 《算法导论》
这是一本经典的算法教材,详细介绍了各种基本算法和数据结构,适合初学者和进阶者。
1.2 《Java数据结构》
这本书详细介绍了Java中的数据结构,包括数组、链表、树、图等,是学习Java编程必备的书籍。
2. 排序算法
2.1 冒泡排序
冒泡排序是一种简单的排序算法,适用于小规模数据集。
public class BubbleSort {
public static void sort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
2.2 快速排序
快速排序是一种高效的排序算法,其平均时间复杂度为O(nlogn)。
public class QuickSort {
public static void sort(int[] arr, int low, int high) {
if (low < high) {
int pivot = partition(arr, low, high);
sort(arr, low, pivot - 1);
sort(arr, pivot + 1, high);
}
}
private static int partition(int[] arr, int low, int high) {
int pivot = arr[high];
int i = (low - 1);
for (int j = low; j < high; j++) {
if (arr[j] < pivot) {
i++;
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int temp = arr[i + 1];
arr[i + 1] = arr[high];
arr[high] = temp;
return i + 1;
}
}
3. 查找算法
3.1 二分查找
二分查找是一种高效的查找算法,适用于有序数组。
public class BinarySearch {
public static int search(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1;
}
}
3.2 线性查找
线性查找是一种简单的查找算法,适用于无序数组。
public class LinearSearch {
public static int search(int[] arr, int target) {
for (int i = 0; i < arr.length; i++) {
if (arr[i] == target) {
return i;
}
}
return -1;
}
}
4. 动态规划
4.1 斐波那契数列
斐波那契数列是一种常见的动态规划问题。
public class Fibonacci {
public static int fibonacci(int n) {
if (n <= 1) {
return n;
}
int[] fib = new int[n + 1];
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i <= n; i++) {
fib[i] = fib[i - 1] + fib[i - 2];
}
return fib[n];
}
}
4.2 最长公共子序列
最长公共子序列是一种经典的动态规划问题。
public class LongestCommonSubsequence {
public static int lcs(int[] arr1, int[] arr2) {
int m = arr1.length;
int n = arr2.length;
int[][] dp = new int[m + 1][n + 1];
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
if (i == 0 || j == 0) {
dp[i][j] = 0;
} else if (arr1[i - 1] == arr2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
return dp[m][n];
}
}
5. 算法练习网站
5.1 LeetCode
LeetCode是一个在线编程社区,提供了大量的算法题目,适合练习和提升算法能力。
5.2 牛客网
牛客网是一个专注于IT行业的在线学习平台,提供了大量的算法题目和面试题。
5.3 力扣
力扣是一个专注于算法和编程的在线社区,提供了大量的算法题目和比赛。
6. 总结
通过以上50个算法学习资源,相信你已经对Java编程中的算法有了更深入的了解。不断练习和总结,相信你会在算法领域取得更好的成绩!
