type
status
date
slug
summary
tags
category
icon
password
@ZZHow(ZZHow1024)
排序
快速排序
快速排序 - 分治:
- 确定分界点:
int x = q[l + r >> 1];
- 调整区间,左边 ≤ x,右边 ≥ x。
- 递归处理左右两段。
归并排序
归并排序 - 分治
- 确定分界点:
int mid = l + r >> 1;
- 递归排序 l 和 r。
- 归并,合二为一。
选择排序
选择排序:
- 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
- 重复第二步,直到所有元素均排序完毕。
冒泡排序
冒泡排序:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
二分
整数的二分
本质:边界
- 模版一:check 满足左半边的性质:
int mid = l + r + 1 >> 1;
if(checkMid)
- true: [mid, r];
- false: [l, mid - 1];
- 模版二:check 满足右半边的性质:
int mid = l + r >> 1;
- if(checkMid)
- true: [l, mid];
- false: [mid + 1, r];