![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
兴趣使然的码仔
要打开真理之门就需要付出对等的代价
展开
-
数据结构:单链表(线性链表)
单链表是什么?单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。重点:链式存取(即可存可取,逻辑形式为链),物理地址不连续链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据重点:元素,指针这就解释了,物理地址不连续的情况下怎么做到以链的逻辑形式存在,即通过指针指向下一个元素的地址结构示意图如下:特别注意:头指针和尾结点,单链表中每个原创 2020-11-12 22:57:42 · 1250 阅读 · 0 评论 -
算法:基数排序及优化
基数排序的本质就是按位数诸位分离归类,直到最高位也统计完成,则整体排序完成思路:(默认使用十进制,桶的个数与进制相关)准备10个空桶,对应数字0-9,即一个二维数组。第一次以个位为标准,遍历arr,把个位为0的数字都放进一个子桶,个位为1的都放进另一个子桶,以此类推,直到个位为9的也都放进一个子桶第二次以十位为标准,遍历arr,把十位为0的数字都放进一个子桶。。。。。。直到arr中的max的最高位也分组完成实现动图如下:代码实现如下:let numbers = [5原创 2020-11-11 21:49:04 · 346 阅读 · 0 评论 -
算法:计数排序及优化
计数排序并不是传统意义的比较排序,即并非通过数字之间的相互比较来决定顺序。思想:遍历数组arr,将arr[i]所为索引,arr[i]出现的次数作为值存入新的数组中,通常称为桶,因为arr[i]就是新数组中的索引,这个数字越大,在桶中的位置越靠后,这个过程即是在排序。例如:arr = [1,4,3,0,2,1];在桶里的结果就是bucket = [1,2,1,1,1,0];解释:桶数组里,索引为0,就是arr[3],出现了一次,所以bucket[0] = 1,索引为1,就是arr[0]原创 2020-11-11 21:22:43 · 188 阅读 · 0 评论 -
算法:归并排序及优化
归并排序是四大分类排序算法之一,也是面试常考到的问题。归并排序思想:将数组递归拆分成两个数组,每执行一次拆分,同时也执行一次排序合并,即拆分多少次,就排序合并多少次,最后结果为一个有序数组。要注意,拆分的最小数组只有一个数字。动图演示如下:实现代码如下:let numbers = [54, 68, 12, 34, 3, 2, 5, 61, 5, 4, 84, 94, 5687];function mergeAndSort(leftArr, rightArr) { let原创 2020-11-02 20:24:40 · 243 阅读 · 0 评论 -
算法:冒泡排序及优化
排序算法中,冒泡通常是入门demo,也是很多面试的初面必考,今天写一下自己实现冒泡排序的代码和优化笔记。冒泡排序:顾名思义,比较两数大小,大的置上,小的置下(或者大的置下,小的置上),重复此操作直到所有数字都比较一遍,结果整个数组排序完成,呈顺序或逆序。最简单的写法就是双循环,两两比较,符合则两数交换,交换的方式常见的有“做差法”,“作和法”。但是这些能写出可运行代码只是最低要求,想要有好的面试结果,必须优化。我个人优化后的代码如下:let numbers = [54, 68, 12, 34,原创 2020-10-27 21:36:23 · 100 阅读 · 0 评论 -
算法:选择排序及优化
选择排序是思路较简单的基础算法之一,面试问到的频率不高,但是还是有必要了解一下的。选择排序思路:1.数组中找到最小的,与首位交换2.去掉首位,在剩余的数中找到最小的,与第二位交换3.去掉第1,2位,在剩余的数中找到最小的,与第三位交换以此类推,直到遍历数组,排序完成个人代码实现如下:let numbers = [54, 68, 12, 34, 3, 2, 5, 61, 5, 4, 84, 94, 5687];function selectSort(arr) { le原创 2020-10-31 08:48:38 · 267 阅读 · 0 评论 -
算法:插入排序及优化
插入排序相较其他排序算法而言并不算优秀,但是因为排序过程中已经排好序的部分会极大影响未排序的部分,所以对于一些整体有序的数组,插入排序的效率更高。插入排序思想:遍历数组,将arr[i]与arr[i-1]比较,若是顺序,则i++,若是逆序则将a[i]与arr[i-1]交换,再比较arr[i-1]与arr[i-2],以此类推,直到找到一个位置,大于前面的数,小于后面的数,则继续外层循环。注意点:双循环,外层循环遍历arr,内层循环在i前面的有序数组中找到i的合适位置例如:5-6-4-3-2-原创 2020-10-29 22:17:44 · 126 阅读 · 0 评论 -
算法:快速排序及优化
快速排序是排序算法中常用的,使用的知识点主要有分治法和递归,本文主要是自己学习比上手实操代码的笔记快速排序的思想:1.选定一个中间值(位置在数组中居中)2.遍历数组,将小于中间值的放入一个数组left,将大于或等于中间值的放入另一个数组right,这样left中的数都比right小3.对left和right分别重复步骤1,2,直到left和right都只剩一个数,排序完成代码实现如下:let numbers = [54, 68, 12, 34, 3, 2, 5, 61, 5, 4,原创 2020-10-28 21:05:54 · 102 阅读 · 0 评论