Acwing算法基础课笔记

课程要求:课下理解并能根据模板题默写算法模板思想

基础算法

  • 排序
    • 快速排序 运用了分治的思想

      x为分界点
      ①确定分界点 四个选择:q[l]/q[(l+r)/2]/q[r]/随机一个点
      ②调整区间,使得调整后的数组中x的左边的数值都小于等于x,右边的则相反
      ③递归上述步骤处理x的左右两段

      • 一种使用额外空间的做法:
        1. 创建a[] b[]数组
        2. q[l,r],扫描数组,小于分界x的放入a[],大于x的放入b[]
        3.把a[] b[]依次放回q[]

      • 双指针做法(无需额外空间):
        i,j一开始分别指向l,r 然后一边相对移动一边与分界值进行比较,当i的位置超过或者等于j的位置时,比较结束。
        下述模板在最后两步的递归调用时应注意问题为,当分界值x取q[R]时,L=R-1, R = R,

点击查看代码
private staitc void quickSort(int[] arr, int left, int right){
    if(left >= right) return;
    int x = arr[(left + right) / 2],
        i = left - 1, j = right + 1;
    while(i < j){
        do{
           i++;
        }while(arr[i] < x);
        do{
           j--;
        }while(arr[j] > x);
        
        if(i < j){
           int temp = arr[i];
           arr[i] = arr[j];
           arr[j] = temp;
         }
    }
    quickSort(arr, left, j);
    quickSort(arr, j + 1, right);
}
  ```
            
 * 归并排序

* 二分
 * 整数

 * 浮点数
posted @   WriteOnce_layForever  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示