随笔分类 - 算法
摘要:对于一个有序数组,如果要查找其中的一个数,我们可以使用二分查找(Binary Search)算法,将它的时间复杂度降低为O(logn).那查找一个有序链表,有没有办法将其时间复杂度也降低为O(logn)呢? 跳表(skip list),全称为跳跃链表,实质上就是一种可以进行二分查找的有序链表,它允许
阅读全文
摘要:路过一家奶茶店,由于生意火爆,门口的排着长长的队伍,先排队的人先买到奶茶,然后再轮到下一个,秩序井然。有没有一种数据结构能体现”先来后到“这种顺序呢? 当然有,那就是队列。先看一下定义:队列是一种操作受限的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。只
阅读全文
摘要:定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作。 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈),这个比喻并非十分恰当,比如拿盘子的时候只是习惯从上面开始拿,也可以从中间拿,而栈的话是只能操作最上面
阅读全文
摘要:使用C#的同学对List应该并不陌生,我们不需要初始化它的大小,并且可以方便的使用Add和Remove方法执行添加和删除操作,但却可以使用下标来访问它的数据,它是我们常说的链表吗? List<int> ls = new List<int>(); ls.Add(1); Console.WriteLin
阅读全文
摘要:为什么数组从0开始编号 数组对一个程序员来说再熟悉不过了,几乎所有的编程语言都有数组,它是最基本的数据结构之一。 刚开始学数组的时候,总是很纳闷,为什么它从0开始编号,而不是从更符合我们思维习惯的1开始呢?带着这个问题往下看。 什么是数组 在编程的过程中,我们经常要用到数组,但是你能够用专业的词汇来
阅读全文
摘要:复杂度分析 算法的复杂度指的是执行该算法的程序在运行时所需要的时间和空间(内存)资源,复杂度分析主要是从时间复杂度和空间复杂度两个层面来考虑。 大O(big O)表示法 在了解时间复杂度之前,我们需要知道怎么用数学符号将它表示出来。 我们知道,一个算法的执行时间 = 该算法中每条语句执行
阅读全文
摘要:一、定义 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 ——— 百度百科 二、基本流程 1.首先设定一个分界值,通过该分界值将数组分成左右两部分
阅读全文
摘要:归并排序的核心思想是“分治”(分的过程中将问题分解成小问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 它是一种稳定的排序, 时间复杂度为O(nlogn) 例如要将【8,4,5,7,1,3,6,2】 排序,步骤如下图 分的过程中调用递归函数,将其拆
阅读全文

浙公网安备 33010602011771号