天天看點

僅靠這份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企業經典的程式設計面試題目并給出解題思路,為學生應試和軟體開發人員面試提供有益指導

繼續閱讀