acwing 算法基础学习笔记

本文是作者学习acwing算法基础课程后的总结笔记,涵盖了快速排序、归并排序、二分搜索、高精度运算、前缀和与差分、双指针等核心概念,并提供了相关代码实现。
摘要由CSDN通过智能技术生成

前言

作者学习后想总结检验自己

文章目录


前言

配套acwing算法基础课程

第一单元

1.快速排序

思路:

(0)规定结束条件

(1)分区间,一般是l+r/2;(分治)

(2)双指针,一个从最左边开始,一个从最右边开始

在左边的若是指到一个小于分界点的停下来,右边的指到一个大于分界点的停下来

两个指针的值交换,继续前进

(3.)递归进行

ps:这里的分界点是数组中间点的值,不是中间点这个坐标!!!

代码:

# include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int q[N];
void quick_sort(int *a,int l,int r)
{
    if(l >= r ) return;
   
   int i = l-1;
   int j = r+1;
   int mid = a[l+r >> 1];//是中间坐标这个值
   
   while(i < j)
   {
       do(i++);while(a[i] < mid);//若想降序排序,这将这两行的大小于号交换
       do(j--);while(a[j] > mid);
       if(i < j)swap(a[i],a[j]);
   }
   quick_sort(a,l,j);
   quick_sort(a,j+1,r);
}

int main(void)
{
    int n;
    cin >> n;
    for(int i =0;i < n;i++)
    cin >> q[i];
    
    quick_sort(q,0,n-1);
    
    for(int i = 0;i < n;i++)
    cout << q[i] <<' ';
    
    return 0;
}

2.归并排序

(1.) 分治--以区间的中点坐标为分界线;

(2)先递归分治两边再排序

(3.)归并--把两个有序的数组合并成一个数组

画图解释归并

运用双指针

两个有序的数组,每个指针指向每个数组最小值,两个最小值比较

将两个指针的值较小的那个放入答案数组,然后这个指针向后走一位,再次比较

若是有一个指针走到头,则把另一个指针的剩余部分接到答案数组里

最后把答案数组赋值回原来数组 

代码

# include <iostream>
using namespace std;

const int N = 1000010;
int q[N],tmp[N];
int n;

void mergr_sort(int *q,int l,int r)
{
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lo_Aias

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值