算法总结
LLLEO_
凡是过去,皆为序曲
展开
-
快速幂模板 (求余)
相信童鞋们做题多了会发现,很多题都是要求次幂的。如果数据比较小,用int 或者long long 的暴力也是可以出结果的,但很多题就不尽如人意了,数据往往非常大,long long 可能都存不下,甚至还会爆内存,导致数据出错。这时候就需要更快更省内存的算法——快速幂快速幂快速幂,就是快!想象一下,求2^16,是2*2*2*...乘16个2快,还是((2*2*2*2) * (2*2*2*2)...原创 2018-07-25 11:03:02 · 217 阅读 · 0 评论 -
欧拉函数
定义在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。例如φ(8)=4,因为1,3,5,7均和8互质。内容通式:即:φ(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…..(1-1/pn)其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(和1互质的数(小于等于1)就是1本身)。注...原创 2018-08-09 16:54:56 · 1422 阅读 · 0 评论 -
十大排序算法
排序算法分类 比较类: 交换排序:冒泡排序、快速排序 插入排序:直接插入排序、希尔排序 选择排序:简单选择排序、堆排序 归并排序:二路归并排序、多路归并排序 非比较排序: 计数排序、桶排序、基数排序按排序操作位置分为 内部排序: 交换排序:冒泡排序、快...原创 2019-03-19 17:37:44 · 151 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
冒泡原理:1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。3. 针对所有的元素重复以上的步骤,除了最后一个。4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。简单来说就是,进行 n-1 轮比较,每轮从头到尾依次比较两个相邻的数,把最大的放...原创 2019-03-19 19:31:21 · 207 阅读 · 0 评论 -
快速排序(Quicksort)
同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮只把一个元素冒泡到数列的一端,而快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。这种方法叫分治法。快排的主要思想就是分治,每次把大于基准和小于基准的数分在两边,每部分在下次又分为两个部分,直...原创 2019-03-19 21:38:17 · 396 阅读 · 0 评论 -
直接插入排序(Straight Insertion Sort)
插入排序,顾名思义就是插,找一个数往有序数列里插。用插入法排序就是,把n个待排序的元素看成为一个有序数列和一个无序数列。开始有序数列中只有一个数,剩余 n-1 个数都在无序数列,然后每次从无序数列中拿出一个数插入到有序数列里,重复 n-1 次。直接插入算法在规模越小,有序程度越高时越高效主要代码void insert_sort(int a[], int n){ for(i...原创 2019-03-20 09:19:22 · 189 阅读 · 0 评论 -
希尔排序(Shell's Sort)
希尔排序又叫缩小增量排序,是1959年 Shell 发明的第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。这种排序是把一定间隔的数当做一个数组,在每个分好的数组里进行插入排序,再缩小间隔重复步骤,直到间隔为1,直接插入排序所有数。这样开始每组数据量都比较小,可以发挥插入的优势,排序速度比较快,在缩小间隔后,虽然个数增加,但是因...原创 2019-03-20 17:15:46 · 373 阅读 · 0 评论 -
选择排序(Selection Sort)
选择排序的工作原理是:每次从未排序数列找到最小值放到前面,前面的数形成一个有序数列,到最后一个数为止。这种算法虽然也是双层循环,但每次循环只交换一次会节省不少空间。主要代码:void select_sort(int a[], int n){ for(int i=0;i<n-1;i++) { int flag = i; for(int j=i;j<n;j++)...原创 2019-03-20 18:04:14 · 219 阅读 · 0 评论