
数据结构 与 算法
HernSong
HernSong
展开
-
队列
简介队列是一个有序列表,可以用数组或是链表来实现。遵循先进先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出数组模拟队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,因此需要两个变量 front及 rear分别记录队列前后端的下标,front 会随着数据输...原创 2019-09-23 16:12:10 · 289 阅读 · 0 评论 -
稀疏数组(sparsearray)
前言先看一个实际的需求编写的五子棋程序中,有存盘退出和续上盘的功能。分析问题: 因为该二维数组的很多值是默认值0, 因此记录了很多没有意义的数据.->稀疏数组。简介备注:稀疏数组中第一行row代表原始二维数组有多少行, col代表原始二维数组有多少列,value代表原始二维数组有多少个不同值(不是0的值);第二行row代表第一个不同值在原始二维数组的多少行,col...原创 2019-09-22 20:28:14 · 351 阅读 · 0 评论 -
线性结构和非线性结构
数据结构包括:线性结构和非线性结构。线性结构1)线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系2)线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的3)链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息4)线性结构常见的有:数组、队列、链表...原创 2019-09-22 20:28:07 · 807 阅读 · 0 评论 -
归并排序算法
时间复杂度为O(nlogn)简介归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:...原创 2019-08-11 17:52:02 · 398 阅读 · 0 评论 -
插入排序算法
时间复杂度为O(n^2)插入排序简介插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是稳...原创 2019-08-11 17:10:10 · 300 阅读 · 0 评论 -
选择排序算法
时间复杂度为O(n^2)简介选择排序是一种简单直观的排序算法,无论什么数据进去都是O(n^2)的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。算法步骤首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 重复第二步,直到所有元素均排序完毕。...原创 2019-08-11 15:53:53 · 382 阅读 · 0 评论 -
冒泡排序算法
冒泡排序总的平均时间复杂度为O(n^2)。简介冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列...原创 2019-08-10 23:40:23 · 565 阅读 · 0 评论 -
Soundex算法
Soundex 算法是一种拼音算法,用于按英语发音来索引姓名,它最初由美国人口调查局开发。Soundex 方法返回一个表示姓名的四字符代码,由一个英文字母后跟三个数字构成。字母是姓名的首字母,数字对姓名中剩余的辅音字母编码。 发音相近的姓名具有相同的 SoundEx 代码。辅音字母将映射到一个特定的数字。算法简要说明1、将英文字按以下规则替换(除第一个字符外): a e ...原创 2018-08-30 19:19:48 · 4693 阅读 · 2 评论 -
时间复杂度
衡量代码的好坏,包括两个非常重要的指标: 1.运行时间; 2.占用空间。一、基本操作执行次数关于代码的基本操作执行次数,我们用四个生活中的场景,来做一下比喻:场景1:给小灰一条长10寸的面包,小灰每3天吃掉1寸,那么吃掉整个面包需要几天?答案自然是 3 X 10 = 30天。如果面包的长度是 N 寸呢?此时吃掉整个面包,需要 3 X n = 3n 天。...原创 2018-08-27 18:54:00 · 792 阅读 · 0 评论 -
位移运算
左移运算( << ): 每左移一位值乘以2。例如:3 << 2 的值为12,即3*2*2=12。右移运算( >> ): 每右移一位值除以2。例如:12 << 2 的值为3,即12 / 2 / 2 = 3。负数右移高位补1,正数右移高位补0;负数、正数左移低位补0。在Java 中 >>> 代表无符号右...原创 2018-05-15 20:22:33 · 1894 阅读 · 0 评论