此博客仅为个人学习博客,模板源自y总算法基础课.
排序
快速排序
void quick_sort(int a[],int l,int r){
if(l >= r) return;
int x = a[l + r >> 1],i = l - 1,j = r + 1;
while(i < j){
do i++;while(a[i] < x);
do j--;while(a[j] > x);
if(i < j) swap(a[i],a[j]);
}
//注意边界问题
quick_sort(a,l,j),quick_sort(a,j+1,r);
}
应用:第k小数 https://ac.nowcoder.com/acm/problem/207028;
归并排序
void mergr_sort(int a[],int l,int r){
if(l >= r) return;
int mid = l + r >> 1;
merge_sort(a,l,mid),merge_sort(a,mid+1,r);
int k = 0,i = l,j = mid + 1;
while(i <= mid && j <= r){
if(a[i] < a[j]) b[k++] = a[i++];
else b[k++] = a[j++];
}
while(i <= mid) b[k++] = a[i++];
while(j <= r) b[k++] = a[j++];
for(i = l,j = 0;i <= r;++j,++i) a[i] = b[j];
}
应用:求逆序对数;
二分
整数模板
求 >= x的最小值
while(l < r){
int mid =