在Android开发中,有许多常见的算法实现可以用来解决不同的问题。以下是记录的一些常见算法及其在Android中的实现示例:
1. 排序算法
- 快速排序:
public void quickSort(int[] arr, int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
private 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;
}
2. 搜索算法
- 二分查找:
public int binarySearch(int[] arr, int target) {
int left = 0, right = arr.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
}
if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 未找到
}
3. 图算法
- 深度优先搜索 (DFS):
public void dfs(int v, boolean[] visited, List<List<Integer>> adj) {
visited[v] = true;
System.out.print(v + " ");
for (int neighbor : adj.get(v)) {
if (!visited[neighbor]) {
dfs(neighbor, visited, adj);
}
}
}
4. 动态规划
- 斐波那契数列:
public 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];
}
5. 字符串算法
- KMP字符串匹配算法:
public int KMPSearch(String pat, String txt) {
int M = pat.length();
int N = txt.length();
int[] lps = new int[M];
computeLPSArray(pat, M, lps);
int i = 0; // txt
int j = 0; // pat
while (i < N) {
if (pat.charAt(j) == txt.charAt(i)) {
i++;
j++;
}
if (j == M) {
return i - j; // 找到匹配
j = lps[j - 1];
} else if (i < N && pat.charAt(j) != txt.charAt(i)) {
if (j != 0) {
j = lps[j - 1];
} else {
i++;
}
}
}
return -1; // 未找到
}
private void computeLPSArray(String pat, int M, int[] lps) {
int len = 0;
lps[0] = 0;
int i = 1;
while (i < M) {
if (pat.charAt(i) == pat.charAt(len)) {
len++;
lps[i] = len;
i++;
} else {
if (len != 0) {
len = lps[len - 1];
} else {
lps[i] = 0;
i++;
}
}
}
}
6. 哈希算法
- 简单的哈希表实现:
class HashTable {
private List<List<Pair>> table;
private int size;
public HashTable(int size) {
this.size = size;
table = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
table.add(new ArrayList<>());
}
}
public void put(String key, String value) {
int index = key.hashCode() % size;