原创 通用算法 -[排序算法] -桶排序

1、算法思想 桶排序就是把最大值和最小值之間的數進行瓜分,例如分成 10 個區間,10個區間對應10個桶,我們把各元素放到對應區間的桶中去,再對每個桶中的數進行排序,可以採用歸併排序,也可以採用快速排序之類的。 之後每個桶裏面的

原创 通用算法 -[排序算法] -排序算法性能比較

1、算法分類 0.1 算法分類 十種常見排序算法可以分爲兩大類: 非線性時間比較類排序:通過比較來決定元素間的相對次序,由於其時間複雜度不能突破O(nlogn),因此稱爲非線性時間比較類排序。 線性時間非比較類排序:不通過

原创 通用算法 - [樹結構] -堆(優先隊列)

1、堆的概念 堆分爲兩種:最大堆和最小堆,兩者的差別在於節點的排序方式。 在最大堆中,父節點的值比每一個子節點的值都要大。在最小堆中,父節點的值比每一個子節點的值都要小。這就是所謂的“堆屬性”,並且這個屬性對堆中的每一個節點都成立

原创 C++模塊-[隨機數] -rand()函數

1、隨機數產生原理 C++通過rand()和函數產生隨機數,rand()的內部是用線性同餘法實現的,所以生成的並不是真正的隨機數,而是在一定範圍內可看爲隨機的僞隨機數。 2、rand()函數 rand()會返回一隨機數值, 範圍在

原创 通用算法 -[排序算法] -冒泡排序

1、算法思想 把第一個元素與第二個元素比較,如果第一個比第二個大,則交換他們的位置。接着繼續比較第二個與第三個元素,如果第二個比第三個大,則交換他們的位置…. 我們對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣一

原创 《C++開發後臺核心技術與應用實踐》- [第一章、C++編程常用技術]

1、前言——什麼是後臺開發 什麼是後臺?直觀的認識就是非界面的程序,它既不是app,也不是網頁,也不是桌面程序(這些統稱爲前端)。 這裏的後臺開發指的是服務端的網絡程序開發,它的功能是: 1、接收用戶端發送來的請求數據; 2、解析

原创 通用算法-[鏈表] - 鏈表中的常見問題

1、前言 數組、鏈表、二叉樹、動態規劃、棧與隊列是面試中常考的知識點,而在這幾個知識點中,鏈表偏基礎,但由於涉及指針的操作,但是卻很能考察學生的編程功底,因此在這裏總結一下二叉樹常考的問題,包括: (1)從尾到頭輸出鏈表; (2)

原创 通用算法 - [樹結構] -二叉樹的一些基本操作(二)

1、前言 數組、鏈表、二叉樹、動態規劃、棧與隊列是面試中常考的知識點,而在這幾個知識點中,二叉樹屬於難度比較大的部分,因此在這裏總結一下二叉樹常考的操作,包括: (1)二叉樹的遞歸遍歷; (2)二叉樹的非遞歸遍歷; (3)求二叉樹

原创 通用算法 - [樹結構] -二叉樹的一些基本操作(三)

1、前言 數組、鏈表、二叉樹、動態規劃、棧與隊列是面試中常考的知識點,而在這幾個知識點中,二叉樹屬於難度比較大的部分,因此在這裏總結一下二叉樹常考的操作,包括: (1)二叉樹的遞歸遍歷; (2)二叉樹的非遞歸遍歷; (3)求二叉樹

原创 通用算法-[數組] -數組常考問題

1、前言 數組、鏈表、二叉樹、動態規劃、棧與隊列是面試中常考的知識點,而在這幾個知識點中,數組形式雖然簡單,但是很靈活,在它基礎上能衍生出很多問題,非常能考察人的編程思維,因此,本文對數組中常見的一些問題進行了總結,包括: (1)

原创 通用算法 - [樹結構] -二叉樹的一些基本操作(一)

1、前言 數組、鏈表、二叉樹、動態規劃、棧與隊列是面試中常考的知識點,而在這幾個知識點中,二叉樹屬於難度比較大的部分,因此在這裏總結一下二叉樹常考的操作,包括: (1)二叉樹的遞歸遍歷; (2)二叉樹的非遞歸遍歷; (3)求二叉樹

原创 通用算法 -[圖算法] - 回溯法

1、什麼是回溯法? 概念:回溯法(探索與回溯法)是一種選優搜索法,又稱爲試探法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇。這種走不通就退回再走的技術爲回溯法,而滿足回溯

原创 通用算法 - [圖算法] - 圖的DFS和BFS

1、圖的表示 圖的表示 G=(V,E)G=(V,E)G=(V,E) 圖G由結點的集合V 和 邊的集合E 組成 可以用兩種方法表示,一種是鄰接鏈表(下圖b),一種是鄰接矩陣(下圖c)。 鄰接鏈表一般用於表示稀疏圖(邊數∣E∣|E|

原创 通用算法 -[圖算法] -最小生成樹

1、什麼是最小生成樹? 2、克魯斯卡爾算法 3、普里姆算法

原创 通用算法 - [樹結構] - 特殊的樹結構

1、平衡二叉樹 2、二叉搜索樹 3、優先隊列(堆) 4、紅黑樹 5、前綴樹