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 @ 2022-03-08 21:42  WriteOnce_layForever  阅读(113)  评论(0编辑  收藏  举报