排序算法
常考排序
快速排序
public void quickSort(int[] nums) {
// 思路:把一个数组分为左右两段,左段小于右段
quickSort(nums, 0, nums.length - 1);
}
// 原地交换,所以传入交换索引
private void quickSort(int[] nums, int start, int end) {
if (start < end) {
// 分治法:divide
int pivot = partition(nums, start, end);
quickSort(nums, 0, pivot - 1);
quickSort(nums, pivot + 1, end);
}
}
// 分区
private int partition(int[] nums, int start, int end) {
// 选取最后一个元素作为基准pivot
int p = nums[end];
int i = start;
// 最后一个值就是基准所以不用比较
for (int j = start; j < end; j++) {
if (nums[j] < p) {
swap(nums, i, j);
i++;
}
}
// 把基准值换到中间
swap(nums, i, end);
return i;
}
// 交换两个元素
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}归并排序
堆排序
用数组表示的完全二叉树 complete binary tree
完全二叉树 VS 其他二叉树


核心代码
参考
最后更新于