每日coding
_Saimon
这个作者很懒,什么都没留下…
展开
-
[每日coding]查找算法--插值查找
插值查找算法简介 插值查找是根据要查找的关键字key与查找表中最大最小记录的关键字比较后的查找方法,其核心就在于插值的计算公式:mid = low+(key-a[low])/(a[high]-a[low])*(high-low)。算法思想 基于二分查找算法,将查找点的选择改进为自适应选择,可以提高查找效率。当然,差值查找也属于有序查找。 注:对于表长较大,而...原创 2019-09-10 15:54:45 · 441 阅读 · 0 评论 -
[每日coding]查找算法--二分查找
算法简介二分查找(Binary Search),是一种在有序数组中查找某一特定元素的查找算法。查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种查找算法每一次比较都使查找范围缩小一半。算法描述给予一个...原创 2019-09-04 10:19:01 · 202 阅读 · 0 评论 -
[每日coding]查找算法--顺序查找
算法简介顺序查找又称为线性查找,是一种最简单的查找方法。适用于线性表的顺序存储结构和链式存储结构。该算法的时间复杂度为O(n)。基本思路从第一个元素m开始逐个与需要查找的元素x进行比较,当比较到元素值相同(即m=x)时返回元素m的下标,如果比较到最后都没有找到,则返回-1。优缺点 缺点:是当n 很大时,平均查找长度较大,效率低; 优点:是对表中数据元素的存储没...原创 2019-09-03 14:07:16 · 202 阅读 · 0 评论 -
[每日coding]排序算法--基数排序
基数排序(Radix Sort)也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,k为数组中的数的最大的位数;基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收...原创 2019-08-30 15:04:43 · 187 阅读 · 0 评论 -
[每日coding]排序算法--桶排序
桶排序(Bucket Sort)是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排算法描述人为设置一个BucketSize,作为每个桶所能放置多少个不同数值(例如当BucketSize==5时,该桶可以存放...原创 2019-08-29 13:46:06 · 175 阅读 · 0 评论 -
[每日coding]排序算法--计数排序
计数排序(Counting sort)的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。计数排序是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序。算法描述找出待排序的数组中最大和最...原创 2019-08-28 14:45:26 · 191 阅读 · 0 评论 -
[每日coding]排序算法--归并排序
归并排序(Merge Sort)和选择排序一样,性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是O(n log n)的时间复杂度。代价是需要额外的内存空间。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,...原创 2019-08-27 15:44:26 · 359 阅读 · 0 评论 -
[每日coding]排序算法--希尔排序
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序是把记录按一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,...原创 2019-08-26 14:42:54 · 167 阅读 · 0 评论 -
[每日coding]排序算法--堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。算法步骤:1. 创建一个堆H[0..n-1]2. 把堆首(最大值)和堆尾互换3. 把堆的尺寸缩小14. 重复步骤1~3,直到堆的大小为1动图演示:算法分析:时间复杂度: 最佳情况:T...原创 2019-08-22 15:24:57 · 121 阅读 · 0 评论 -
[每日coding]排序算法--冒泡排序
冒泡排序(Bubble Sort)冒泡排序是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就进行交换。遍历数列的工作是重复地进行直到该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法描述比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在...原创 2019-08-21 15:25:05 · 221 阅读 · 0 评论 -
[每日coding]排序算法--选择排序
选择排序(Selection Sort)是表现最稳定的排序算法之一,因为无论什么数据进去都是O(n^2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法。选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起...原创 2019-08-23 10:29:02 · 446 阅读 · 0 评论 -
[每日coding]排序算法--插入排序
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用内存排序(只需用到O(1)的额外空间),在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法步骤从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在...原创 2019-08-24 13:52:18 · 166 阅读 · 0 评论 -
[每日coding]排序算法--快速排序
快速排序的基本思想:分治法。通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有元素比基准值小的摆放在基准前面,所有...原创 2019-08-20 14:06:45 · 251 阅读 · 0 评论 -
[每日coding]查找算法--斐波那契查找
斐波那契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、····,在数学上,斐波那契被递归方法如下定义:F(1)=1,F(2)=1,F(n)=f(n-1)+F(n-2) (n>=2)。该数列越往后相邻的两个数的比值越趋向于黄金比例值(0.618)。算法描述斐波那契查找与折半查找很相似,他是根据斐波那契数列的特点对有序表进行分割的。他要求开始表中记录的...原创 2019-09-12 17:52:38 · 722 阅读 · 0 评论