小白学算法
文章平均质量分 67
moverzp
这个作者很懒,什么都没留下…
展开
-
小白学算法1.1——栈
小白学算法(01)——堆栈标签: 小白学算法1.什么是堆栈先解释一下什么是算法和数据结构吧~简单地说,算法就是解决一个问题的方法。有一个很流行的笑话:请问如何把大象放到冰箱里?答:第一步,打开冰箱;第二步,把大象塞进去;第三步,关上冰箱。当然,这是一个非常糟糕甚至失败的算法,因为谁都知道在第二步中大象是塞不进冰箱的,大象相对于冰箱来说实在是太大了。数据结构是算法的副产品,因为大部分的算法都需要适原创 2015-11-11 11:02:41 · 1007 阅读 · 0 评论 -
小白学算法2.A——常见排序算法比较
小白学算法2.A——常见排序算法比较标签: 小白学算法 博客1.常见算法的时间复杂度与空间复杂度 名称 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 冒泡排序 O(N2)O(N^2) O(N2)O(N^2) O(1)O(1) 稳定 选择排序 O(N2)O(N^2) O(N2)O(N^2) O(1)O(1) 不稳定 插入排序 O(原创 2016-01-15 14:59:21 · 953 阅读 · 0 评论 -
小白学算法2.2——选择排序
小白学算法2.2——选择排序标签: 小白学算法小白学算法2.x全部为排序算法 本节所有排序算法按照从小到大排序1.选择排序算法选择排序属于初级排序,时间复杂度为O(n2)O(n^2)。n个数进行选择排序,需要n-1次排序,每次排序把最小的数和最左边的数进行交换。2.选择排序实现void bubbleSort(int* A, int n) { for (int i=0; i<n; i++)原创 2015-11-22 20:51:10 · 605 阅读 · 0 评论 -
小白学算法4.1——二叉查找树
小白学算法4.1——二叉查找树标签: 小白学算法1.什么是二叉查找树(Binary Search Tree)二叉查找树是一种特殊的二叉树,相对于普通的二叉树,其有如下特点: 若任意结点的左子树不空,则左子树上所有结点的值均小于它的根结点的值 任意结点的右子树不空,则右子树上所有结点的值均大于它的根结点的值 任意结点的左、右子树也分别为二叉查找树 没有键值相等的结点 二叉查原创 2016-03-12 15:39:49 · 819 阅读 · 0 评论 -
小白学算法2.3——插入排序
小白学算法2.3——插入排序标签: 小白学算法1.插入排序算法插入排序属于初级排序,时间复杂度为O(n2)O(n^2)。n个数进行插入排序,需要n-2次排序,每次排序交换的次数取决于待排序的数列本身。插入排序假设最左边的数是最小的数,然后向右遍历,如果第二个数比第一个数小,则交换两个数的位置,反之不交换,结果是前两个数组成有序数列。继续向右遍历,如果第三个数比第二个数小,则交换第二个数和第三个数的位原创 2015-11-23 10:56:28 · 706 阅读 · 0 评论 -
小白学算法3.1——低位优先字符串排序
小白学算法3.1——低位优先字符串排序标签: 小白学算法 博客本节内容总结自《算法(第4版)》5.1节1.低位优先字符串排序相比较于数字,字符串在生活中出现的频率更高,更常用,如姓名、车牌和电话号码等,而字符串常常也需要按照一定的顺序存放(一般是ASCII顺序),此时决定顺序的键就是字符串。字符串常见的排序算法有两种,分别是低位优先(LSD)和高位优先(MSD),低位优先从右向左检查字符,高位优先从原创 2016-02-22 10:36:25 · 2722 阅读 · 0 评论 -
小白学算法3.3——三向字符串快速排序
小白学算法3.3——三向字符串快速排序标签: 小白学算法1.三向字符串快速排序算法MSD对包含大量重复键的字符串进行排序时,效率十分低下。三向字符串快速排序可以很好的解决这个问题,其是MSD和快速排序的结合版。三向字符串快排有两个标记,第一个标记lt指向字符串集合开始位置,第二个标记gt指向字符串结束位置。首先选出第一个字符串作为切分字符串,然后从开始位置向后遍历字符串集合,如果当前字符串键值比切分原创 2016-03-05 20:57:09 · 2007 阅读 · 0 评论 -
小白学算法3.2——高位优先字符串排序
小白学算法3.2——高位优先字符串排序标签: 小白学算法 博客本节内容总结自《算法(第4版)》5.1节1.高位优先字符串排序字符串常见的排序算法有两种,分别是低位优先(LSD)和高位优先(MSD),低位优先从右向左检查字符,高位优先从左向右检查字符。低位优先字符串排序要求待排序的字符串长度一致,然而很多时候字符串长度并不一致,低位优先排序并不适用,此时就要用到高位优先排序或者三向字符串快排。高位优原创 2016-03-02 17:27:11 · 4110 阅读 · 0 评论 -
小白学算法2.1——冒泡排序
小白学算法2.1——冒泡排序标签: 小白学算法小白学算法2.x全部为排序算法 本节所有排序算法按照从小到大排序1.冒泡排序算法 排序就是将一组对象按照某种逻辑顺序重新排列的过程排序现象很普遍,比如高考成绩的全省排名。好的排序不仅能够在极短的时间内完成任务,而且空间消耗也非常的小,比如位排序。由于现在内存的限制并不像以前那么苛刻了,甚至有时候会消耗空间来节省时间,所以排序算法常常用时间复杂度来原创 2015-11-21 18:23:45 · 855 阅读 · 0 评论 -
小白学算法2.8——计数排序
小白学算法2.8——计数排序标签: 小白学算法1.计数排序算法计数排序是某些情况下比较快的排序算法,时间复杂度为O(N)O(N)。基于比较的排序算法时间复杂度最低就是O(NlogN)O(NlogN),故计数排序是基于非比较的算法。计数排序的使用条件限制比较多,需要对待排序的数组有一个初步的了解,比如要求的排序数据一般都是整数,且待排序的数组中最大值和最小值差值不应该过大。计数排序常常用来对年龄、身高原创 2015-12-09 15:07:44 · 1109 阅读 · 0 评论 -
小白学算法2.9——基数排序
小白学算法2.9——基数排序标签: 小白学算法1.基数排序算法基数排序的时间复杂度为O(d∗2N)O(d*2N),d表示待排序数字的位数,2N是因为分配和收集都需要O(N)O(N)的时间,空间复杂度为O(N+M)O(N+M),M表示桶的数量。假设我们要对十进制的数进行排序,那么需要10个桶表示0~9。首先从个位开始,把个位是0的数放进0号桶,个位是1的数放进1号桶……依次类推,直到把个位是9的数放进原创 2015-12-09 15:55:27 · 850 阅读 · 0 评论 -
小白学算法2.7——堆排序
小白学算法2.7——堆排序标签: 小白学算法1.堆排序算法堆排序属于高级排序,时间复杂度为O(NlogN)O(NlogN)。堆排序之所以叫堆排序是因为堆排序是基于二叉堆实现的优先队列实现的。 二叉堆的相关内容请阅读小白学算法1.3——堆 优先队列相关内容请阅读小白学算法1.4——优先队列第一阶段:构造有序的二叉堆把一个无序的堆有序化成一个二叉堆,最容易想到的一个算法就是从数组的左端向右,原创 2015-12-07 14:16:19 · 840 阅读 · 0 评论 -
小白学算法1.4——优先队列
小白学算法1.4——优先队列标签: 小白学算法1.什么是优先队列队列是先进先出,就像排队买东西一样,先排的人先买,后排的人后买,常见的操作是进队和出队。优先队列也像队列一样,常见的操作也是进队和出队,不过出队操作并不是把最早进入的元素出队,而是把最大或者最小的元素出队,这就是“优先队列”中“优先”的含义。优先队列的出队和入队操作常常被称为:插入元素(insert)删除最大/最小元素(delMax原创 2015-12-05 20:43:10 · 814 阅读 · 0 评论 -
小白学算法1.3——堆
小白学算法1.3——堆标签: 小白学算法1.什么是堆 堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆是指二叉堆。 当一棵二叉树的每个结点都大于等于它的两个子结点时,它被称为堆有序。 根节点是堆有序的二叉树中最大的结点。 二叉堆(以下简称堆)是一组能够用堆有序的完全二叉树排序的元素,在数组中按照层级存储(一般不使用第一个位置),下图是一个堆有序的完全原创 2015-12-03 11:47:51 · 841 阅读 · 0 评论 -
小白学算法2.5.1——归并排序(自底而上)
小白学算法2.5.1——归并排序(自底而上)标签: 小白学算法1.自底而上的归并排序算法自顶而下是从大数组到小数组再到大数组,因为最后都是分解到一个元素的数组,所以可以直接从一个元素的数组开始合并,一一合二,二二合四……直到合并出需要排序的大数组,这就是自底而上的归并排序算法。两种归并的方式时间复杂度和空间复杂度一样,后者比起前者编写起来要简单一些。自顶而下和自底而上的思想在编程中的非常的重要。2.原创 2015-11-30 16:43:13 · 1090 阅读 · 0 评论 -
小白学算法2.5——归并排序(自顶而下)
小白学算法2.5——归并排序(自顶而下)标签: 小白学算法1.归并排序算法归并排序属于高级排序,时间复杂度为O(nlogn)O(nlogn),空间复杂度为O(n)O(n)。归并排序的优点是其时间复杂度较低,任意数列的排序时间都和nlogn成正比;归并排序的缺点是其空间复杂度较高,为O(n)O(n)。归并排序采用的是分治思想。分治的分指的是把大事情分解为小事情;分治的治指的是把分解的小事情各个击破,以原创 2015-11-27 15:34:14 · 1220 阅读 · 0 评论 -
小白学算法2.4——希尔排序
小白学算法2.4——希尔排序标签: 小白学算法1.希尔排序算法希尔排序属于高级排序,时间复杂度和排序中的h有关系,一般不说h具体值时,希尔排序时间复杂度平均为O(n1.3)O(n^{1.3})。本文中介绍的希尔排序较为简单,时间复杂度为O(n1.5)O(n^{1.5})。希尔排序是插入排序的“进化版”。插入排序的运行时间和输入有很大的关系,如果把已经按照从小到大的顺序排列好的数组作为输入,此时插入排原创 2015-11-27 15:15:43 · 861 阅读 · 0 评论 -
小白学算法1.2——链表
小白学算法1.2——链表标签:小白学算法1.什么是链表 链表是一种递归的数据结构,它或者为空,或者指向指向下一个结点。 struct node{ int data; node* next; };看起来很抽象的感觉,就我自己的理解,可以用车链子来模拟链表在计算机中的结构。“链表结点”就是车链子上面的一个个“圆柱结点”,每个“圆柱结点”最多与两个其它“圆柱结点”相连原创 2015-11-17 11:18:29 · 835 阅读 · 0 评论 -
小白学算法2.6——快速排序
小白学算法2.6——快速排序标签: 小白学算法1.快速排序算法快速排序属于高级排序,时间复杂度为O(NlogN)O(NlogN),空间复杂度O(NlogN)O(NlogN)。快速排序是最快的通用排序算法。快速排序首先是选取数组中某个元素作为标准元素(一般是最左边的元素或者中间的元素),然后把小于这个元素的元素放置在数组的左边,把大于这个元素的元素放置在数组的右边,最后把左边和右边的交界处的元素和标准原创 2015-12-01 11:29:43 · 911 阅读 · 0 评论