算法和数据结构
文章平均质量分 53
充分讲解算法和数据结构并配备实现代码
你所有承诺
这个作者很懒,什么都没留下…
展开
-
归并排序算法讲解
归并排序算法是一款十分高效的算法,因为用到了二叉树的特性,我们知道能使用二叉树特性的排序都比较高效,我们详细讲解一下比如有两个已经排好的数组([5,7],[2,6,10]),这个需要我们进行合并排序,我们改如何排呢①首先取出第一个数组第一个元素:5,第二个数组第一个元素:2,我们得到最小值2,放入到第三个数组c中,此时c是[2]②因为第一个数组第一个元素还没有被拿走,所以第二步我们取出...原创 2018-09-28 23:26:19 · 1151 阅读 · 0 评论 -
插入算法讲解
什么是插入算法,顾名思义,具有插入操作的算法举个生活中的例子,我们平时打扑克牌的时候,习惯性的按照点数的大小进行排序,我们先看到一个牌,然后需要把这个牌和这个牌所在位置的前面所有位置的牌进行一个对比,插入到他能插入的最前面位置。比如[10, 9, 7, 5, 6, 3]第一遍,选第一张牌10:首先我们拿到第一张牌,是10,因为是第一张,所以不需要排序,保持顺序[10, 9, 7...原创 2018-08-20 23:23:20 · 3981 阅读 · 0 评论 -
快速排序算法讲解
看到名字,感觉很腻害,嗯,今天我们来讲解下这个比较腻害的算法思路如下:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。比如我们有一个数组{10,1,18,30,23,12,7,5,18,17},我们现在要使用快速排序算法对其进行排序要比较,总先要找一个值才行撒,我们也不挑剔,我们要先...原创 2018-08-27 23:47:13 · 1640 阅读 · 0 评论 -
冒泡算法讲解
临近的两个元素进行比较,然后互换顺序,一趟走完之后最大的或者最小的元素排在第一个或者最后一个位置(最大或者最小看实际需求),给的的感觉就是一个小泡泡一直冒啊冒,所以有个好听的名字叫冒泡算法举个例子,有数组[10, 1, 18, 30, 23, 12, 7, 5, 18, 17],我们使用从小到大的排序方法第一趟,外排下标为0,对应的值为10内排开始①下标0和下标1的值进行比较。10...原创 2018-08-30 09:01:47 · 12869 阅读 · 0 评论 -
选择排序算法讲解
选择排序,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,和剩下的数进行比较,再顺序放入新数组,直到全部拿完举个例子,有数组[10, 1, 18, 30, 23, 12, 7, 5, 18, 17],我们使用从小到大的排序方法第一趟,外排下标为0,对应数组值10内排开始①下标0和下标1的值进行比较。10和1比,发现1比10小,进行互换,内排一次完成,结...原创 2018-08-30 22:22:42 · 2341 阅读 · 0 评论 -
桶排序算法讲解
嗯,看到这个名字就觉得是一个老实的算法,给人一种笨笨的感觉,其实不然,桶排序很牛x的,比前面我们说的快速排序算法还快想要使用桶算法,得先知道区间(比如分数0-100,比如岁数1-200等)我们通过一个简单的例子来讲解,讲解完之后希望大家可以对桶排序有一个深入的了解比如有数组a=[2,7,5,9,8,8],我们需要对这个数组进行排序嗯,看到数组之后,我们发现这是一个最大值不超过10的...原创 2018-09-02 21:00:14 · 1916 阅读 · 0 评论 -
鸽巢排序讲解
鸽巢排序是桶排序的一种,反正是变着花样玩,顾名思义,就是一排鸽巢,看里面有几个鸽巢,然后遍历这些鸽巢,打印出来就好,排序之前得先知道区间和最大值我们通过一个简单的例子来讲解,讲解完之后希望大家可以对鸽巢排序有一个深入的了解比如有数组a=[2,7,5,9,8,8],我们需要对这个数组进行排序嗯,看到数组之后,我们发现这是一个最大值不超过10的数组,那么我们定区间为0-10,定义一个下标0...原创 2018-09-08 17:06:45 · 2442 阅读 · 0 评论 -
基数排序讲解
基数排序,顾名思义就是找一个基数,然后搞起,一般情况我们都会以10为基数,基数排序也是桶排序的一种,接下来我们通过例子来详细讲解一下有数组[10 1 18 30 23 12 7 5 18 233 144]我们建立一个下标从0到9的桶,然后对数组进行遍历首先我们遍历个位数,把个位数一样的数据放到对应下标的桶中,比如上面的10的个位数是0,所以放到第一个桶中,1的个位数是1,所以放到下标为...原创 2018-09-11 00:02:40 · 638 阅读 · 0 评论 -
地精排序算法讲解
地精,这个名字我也很意外,好吧,可能是翻译的问题吧,我们不要过多纠结和冒泡比较像,数字往前冒,一旦遇到比小的,则互换位置,往回冒,然后继续往前冒举个例子10, 12, 7, 5先取10,这时候下标为0,不比较,下标0=》1取12,12跟10比,12比10大,保持原型,下标1=》2取7,7和前面的数12比,7比12小,互换位置,得到[10, 7, 12, 5],下标2=》1...原创 2018-09-13 21:47:38 · 616 阅读 · 0 评论 -
奇偶数排序算法讲解
算法看多了也脑袋疼,这不,奇偶算法,这名字怪怪的,也不知道哪位大神想出来的这个算法看名字大概也知道,排序跟奇偶位数有关,嗯,你猜到了重点奇偶排序是这样的,先奇数位和它右侧的数据进行排序,然后偶数位和它右侧的数据进行排序,从而得到最终结果我们来举个例子,有数组[10, 12, 7, 5]先选偶位还是先选奇位,看你的代码了①我们选择偶数位 10 710和它右边的12比,嗯,...原创 2018-09-15 08:42:34 · 5595 阅读 · 1 评论 -
希尔排序算法讲解
希尔排序是插入排序的一种,不过更加高效,也成为缩小增量排序,直接上例子原始数组[1,0,2,10,9,70,5,6,3]我们先选择增量 length/2,如上9/2=4,分为4组,分别是【1,9】,【0,70】,【2,5】,【10,6】加上剩下的一组【3】然后给每个数组进行排序,得到[1,0,2,6,9,70,5,10,3]然后再选择增量length/2/2,如上9/2/2=2,分...原创 2018-09-16 23:11:29 · 1030 阅读 · 0 评论 -
耐心排序详解
嗯,看名字挺有耐心的,耐心排序充分集合了桶排序和插入排序的优点首先使用桶排序,排序之后每个桶中数据相对有序,这样再使用插入排序,简化了问题,速度变的更快我们通过例子来讲解下,假设我们有数组[6 4 5 1 8 7 2 3]第一步:因为此前还没有桶,则建立一个桶,我们命名为桶1,从上面取出第一个数字 6,然后将6放入到桶中第二步:我们使用第二个值4,然后遍历现有的桶,遍历的工程中先遇...原创 2018-09-19 00:30:59 · 1588 阅读 · 1 评论 -
梳排序算法讲解
嗯,历史山这些算法的名字总是,嗯,不知道如何说,反正充满了想象力,不过也恰恰形象的说明了这个算法梳排序,跟梳子一样,齿和齿中间有间隙,这个间隙是多少呢,是1.3,嗯,记住就好,为啥是1.3,数学功底比较强的人可以去看看哈,我们这就不做太多讨论,直接举例有数组[6, 4, 5, 1, 8, 7, 2, 3]我们先来算算间隙,上面的数组长度为8,8/1.3=6,则间隙为6我们开始遍历数...原创 2018-09-20 23:59:36 · 727 阅读 · 0 评论 -
鸡尾酒排序讲解
鸡尾酒排序是冒泡排序的一种,又称为来回排序。它比冒泡排序要高级点,为何这么说呢冒泡排序是先找最大,然后找第二大,然后一直找完鸡尾酒排序是这样的,先找最大,再找最小,然后找第二大,再找第二小,依次类推,直至找不到了为止举例,有数组[6, 4, 5, 1, 8, 7, 2, 3]先从左到右两两比较并排序,直到8排到最右边[4, 6, 5, 1, 8, 7, 2, 3][4, 5,...原创 2018-09-21 23:54:06 · 1167 阅读 · 0 评论 -
计数排序算法讲解
前面我讲解了一个基数排序算法,这地方要说一下哈,同音不同字,不要弄混淆了今天我们讲的这个算法呢,这,这,这,又一个看名字就能看出来一点道道的,的确,计数算法就是给每个元素计一些数,通过一些数来对元素进行比较和排序,我们来看个例子有数组【6, 4, 5, 1, 8, 7, 2, 3】,同理我们建立一个长度为6的空数组我们先取出第一个元素6,然后看看整个数组中有多少个比6小的,嗯,我们发现...原创 2018-09-25 23:41:39 · 869 阅读 · 1 评论