数据结构与算法
排序
常见排序算法的比较
快速排序
public class QuickSort {
public void quickSort(int[] arr, int l, int r) {
if (l < r) {
int mid = partition(arr, l, r);
quickSort(arr, l, mid - 1);
quickSort(arr, mid + 1, r);
}
}
private int partition(int[] arr, int l, int r) {
// 选择arr[r]作为主元,对子数组arr[l..r]进行划分
int x = arr[r];
int i = l - 1;
// 维持循环不变式a[l..i] < x, a[i+1..j] >= x
for (int j = l; j <= r - 1; j++) {
if (arr[j] < x) {
i++;
// 交换arr[i]和arr[j]
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
// 交换arr[i+1]与arr[r]
int temp = arr[i+1];
arr[i+1] = arr[r];
arr[r] = temp;
// 返回主元的下标
return i + 1;
}
}快速选择
堆排序
归并排序
二叉树
前序遍历
后序遍历
中序遍历
动态规划
经典问题
背包
线性
区间
树形
状压
数位
计数型
递推型
概率型
博弈型
记忆化递归
最后更新于