排序算法
常考排序
快速排序
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)
{
(nums[i], nums[j]) = (nums[j], nums[i]);
i++;
}
}
// 把基准值换到中间
(nums[i], nums[end]) = (nums[end], nums[i]);
return i;
}归并排序
堆排序
用数组表示的完美二叉树 complete binary tree
完美二叉树 VS 其他二叉树


核心代码
参考
练习
最后更新于