
算法
程序员小明丶
这个作者很懒,什么都没留下…
展开
-
递归
什么是递归,说白了就是程序自己调用自己。那么在什么情况下要使用递归呢 1、问题过于复杂无法拆解成循环语句。 2、问题非线性,而函数递归,由于借助栈内存(函数的每一次调用,就会把它的数据重新压入到栈空间,它的数据都会保留下来),可以解决非线的问题(如汉诺塔问题)。 这里要注意:在单线程模式下只能同时执行一个函数,当函数自己调用自己时(子级),会先执行子级的代码,然后子级执行完成后再返回到上一级继续执...原创 2019-08-04 18:57:43 · 335 阅读 · 2 评论 -
插入排序
插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。插入算...原创 2019-08-24 14:47:33 · 937 阅读 · 0 评论 -
冒泡排序
一、冒泡排序算法的原理如下: 1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3、针对所有的元素重复以上的步骤,除了最后一个。 4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较 二、时间复杂度 冒泡排序的最好时间复杂度为O(n),冒泡排序总的平均时间复杂度为O...原创 2019-08-12 21:02:50 · 252 阅读 · 2 评论 -
选择排序
一、选择排序(不稳定 时间复杂度:O(N²)) 选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 二、代码 //交换两个数的值 #define swap(a,b) {typeof(a) t=a; a=b; b=t;} // 选择排序...原创 2019-09-19 15:50:56 · 139 阅读 · 0 评论 -
二分查找
一、二分查找(时间复杂度 O(log2n)) 1、什么是二分查找 首先假设数据是升序的,然后记录下中间的数据,让要查找的数据与它比较,如果相等那么查找成功,如果不相等,那么把数据以这个中间的数据为界限分成前后两部分,如果要查找的数据比中间的这个数据小那么就去前半部分查找,如果要查找的数据比中间的这个数据大那么就去后半部分查找,重复以上过程,直到找到满足条件的数据,如果出现左边的数据比右边的大,那么...原创 2019-09-22 11:24:10 · 174 阅读 · 0 评论