天天看点

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

作者:老诚不bug

前言

本书由曾供职于多家知名IT企业的资深软件架构师撰写,涵盖知名IT公司(微软、谷歌、亚马逊、雅虎、脸谱、苹果、Adobe )技术面试的程序设计问题及其解题思路。来解析面试过程中针对不同问题,提供多个具有不同复杂度的解决方法,兼顾自学教材和面试辅导的不同需求

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

目录

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

一、冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或⽓泡排序)是⼀种简单的排序算法。它重复地⾛ 访过要排序的数列,⼀次⽐较两个元素,如果他们的顺序错误就把他们交换过来。⾛访数列的⼯ 作是重复地进⾏直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因 为越⼤的元素会经由交换慢慢“浮”到数列的顶端,故名。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

二、选择排序

选择排序(Selection sort)是⼀种简单直观的排序算法。它的⼯作原理是每⼀次从待排序的数据元 素中选出最⼩(或最⼤)的⼀个元素,存放在序列的起始(末尾)位置,直到全部待排序的数据元素排 完。选择排序是不稳定的排序⽅法(⽐如序列[5, 5, 3]第⼀次就将第⼀个[5]与[3]交换,导致第 ⼀个5挪动到第⼆个5后⾯)。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

三、插入排序

插⼊排序的基本操作就是将⼀个数据插⼊到已经排好序的有序数据中,从⽽得到⼀个新的、个数 加⼀的有序数据,算法适⽤于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序⽅法。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

四、快速排序

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过⼀趟排序将要排序的数据分割成 独⽴的两部分,其中⼀部分的所有数据都⽐另外⼀部分的所有数据都要⼩,然后再按此⽅法对这 两部分数据分别进⾏快速排序,整个排序过程可以递归进⾏,以此达到整个数据变成有序序列。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

五、归并排序

归并排序(MERGE-SORT)是建⽴在归并操作上的⼀种有效的排序算法,该算法是采⽤分治法(Divide and Conquer)的⼀个⾮常典型的应⽤。将已有序的⼦序列合并,得到完全有序的序 列;即先使每个⼦序列有序,再使⼦序列段间有序。若将两个有序表合并成⼀个有序表,称为⼆ 路归并。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

六、希尔排序

希尔排序(Shell's Sort)是插⼊排序的⼀种⼜称“缩⼩增量排序”(Diminishing Increment Sort), 是直接插⼊排序算法的⼀种更⾼效的改进版本。希尔排序是⾮稳定排序算法。该⽅法因D.L.Shell于1959年提出⽽得名。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

七、堆排序

堆排序(Heapsort)是指利⽤堆积树(堆)这种数据结构所设计的⼀种排序算法,它是选择排序的 ⼀种。可以利⽤数组的特点快速定位指定索引的元素。堆分为⼤根堆和⼩根堆,是完全⼆叉树。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

八、基数排序(桶排序)

基数排序(radix sort)属于"分配式排序"(distribution sort),⼜称"桶⼦法"(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配⾄某些"桶"中,藉以达到排序的 作⽤,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数, ⽽m为堆数,在某些时候,基数排序法的效率⾼于其它的稳定性排序法。
仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

九、递归

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

十、链表

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

十一、栈

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

十二、队列

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

十三、二叉树

仅靠这份GitHub star过万的图解排序和数据结构,我杀进了字节跳动

由于篇幅限制,笔记无法全部为大家展示出来,就以截图主要内容的形式让大家参考,对这两本书感兴趣的小伙伴,可以私信小编【666】即可无偿领取到

最后

此笔记介绍计算机编程中使用的排序和数据结构,覆盖相应竞争性考试的主题,目的不是提供关于排序和数据结构的定理及证明,而是强调问题及其分析,讲解必备知识和解题技巧。书中汇集知名IT企业经典的编程面试题目并给出解题思路,为学生应试和软件开发人员面试提供有益指导

继续阅读