zoukankan      html  css  js  c++  java
  • 算法模板:快速排序,欧拉筛法

    1. 快速排序:

      • 原理:找到一个基准数,小于它的放一边,大于它的在另一边

      • 应用:排序,STL sort

      • 模板:

        void quicksort(int l,int r) { //取左一为基准轴
            int i=l,j=r;
            int k=a[l];
            if(i>=j) return;
            while(i<j) {
                while(i<j && a[j]>k) j--;
               	if(i<j) {a[i]=a[j]; i++}
                while(i<j && a[i]<=k) i++;
                if(i<j) {a[j]=a[i]; j--} 
            }
            a[i] = k;
            quicksort(l,i-1);
            quicksort(i+1,r);
        }
        

        优化:选取基准轴时采用三数取中法,分区规模够小时采用插排法,聚集相等元素,优化尾递归等...

        void qsort(int l,int r) {
            int mid=a[(l+r)/2];
            int i=l,j=r;
            while(i<j) {
        		while(a[i]<mid) i++;
                while(a[j]>mid) j--;
                if(i<=j) {
                    swap(a[i],a[j]);
                    i++;
                    j--;
                }
            }
            if(l<j) qsort(l,j);
            if(i<r) qsort(i,r);
        }
        
    2. 欧拉筛法(线性筛):

      • 原理:最小质因数*最大因数(非自身) = 合数,如此每个数仅被删除一次(没明白,背模板就完事了

      • 模板:

        cnt = 0;
        memset(isPrime,1,sizeof(isPrime));
         isPrime[1] = 0;
        for(int i=2; i<=n; i++) {
        	if(isPrime[i]) 
                Prime[++cnt] = i;
            for(int j=1; j<=cnt && i*Prime[j]<=n; j++) {
                isPrime[i*Prime[j]] = 0;
                if(i%Prime[j] == 0) break;
            }
        }
        
  • 相关阅读:
    i++与++i的区别和使用
    C++中函数返回引用
    ASP.NET金课设计(四)
    ASP.NET金课设计(三)
    ASP.NET金课设计(二)
    ASP.NET金课--课程大纲
    使用PagerTemplate实现GridView分页
    后台模块--订单管理
    前台模块--首页
    后台模块--公告管理
  • 原文地址:https://www.cnblogs.com/syisyuan/p/13708498.html
Copyright © 2011-2022 走看看