算法基礎總結

算法基礎

1、算法有5個基本組成:
輸入:算法都要有一個輸入
輸出:有確定的輸出
有窮:有限的解決步驟,可執行完
確切:每個步驟都是無二義的,確定的
可行:在可以接受的範圍內有解

2、算法的分析與評價:時間,空間兩個方面衡量。
複雜度表示函數:三種,上界、下界,上下界。多用O(x).

3、基本數據結構
線性表:
實現方式,數組、鏈表
棧和隊列:
先進後出FILO、先進先出FIFO
樹:
二叉樹、二叉搜索樹、B樹、B+樹、紅黑樹、堆
圖:
連通圖,有向圖,無向圖,最小生成樹
散列表(Hash表):
散列函數:全域散列法(隨機選擇預設的散列函數)
開放尋址法(衝突解決):線性探查,二次探查,雙重散列,

查找排序

查找:
1、查找分爲查找成功和不成功的情況

2、順序查找、折半查找、Hash查找

排序:
排序需要考慮兩個特徵:a、穩定性 b、時空複雜度
1、插入排序
a、直接插入排序
初始已排序數組爲空,將未排序的數組元素依次取出插入到已排序數組的合適位置。合適位置通過從已排序數組的頭部遍歷查找,插入意味着後續元素的後移。
b、折半插入排序
和直接插入排序只有一點不同即,尋找位置是通過二分查找的方式。

2、冒泡排序
多次遍歷數組,每一次遍歷都會將特定(未排序中最大或最小)移到數組未排序部分的尾部(或頭部),加入到已排序部分。每次遍歷每個元素之間進行比較決定是否交換。
時間:最好O(n) 平均O(n2) 最壞O(n2) 空間:O(1) 穩定:是

3、簡單選擇排序
類似於冒泡排序,但每次遍歷只對每個元素進行比較,並保存特定元素的下標,一次遍歷完之後交換。
時間:最好O(n) 平均O(n2) 最壞O(n2) 空間:O(1) 穩定:是

4、希爾排序
是插入排序的一種改進,將元素利用下標的增量進行分組。每次對分組排序後,減小增量,重新排序。
時間:最好- 平均- 最壞- 空間:O(1) 穩定:否

5、快速排序
分兩步:
第一步,取軸,將數組比軸小的部分放在一邊,大的放到另一邊
第二步,分別對軸兩邊的數據進行第一步的操作
時間:最好O(nlog2n) 平均O(nlog2n ) 最壞O(n2) 空間:O(log2n) 穩定:否

6、堆排序
第一步:構造大根堆或小根堆
第二步:根和最後元素交換,重新調整堆形成大根堆
時間:最好O(nlog2n) 平均O(nlog2n ) 最壞O(nlog2n ) 空間:O(1) 穩定:否

7、歸併排序
將序列每相鄰兩個數字進行歸併操作(merge),形成floor(n/2)個序列,排序後每個序列包含兩個元素
將上述序列再次歸併,形成floor(n/4)個序列,每個序列包含四個元素
重複步驟2,直到所有元素排序完畢
時間:最好O(nlog2n) 平均O(nlog2n ) 最壞O(nlog2n ) 空間:O(n) 穩定:否

8、基數排序從尾數位開始排序,因爲是穩定的排序,所以大的值不會到前面去。
時間:最好O(d(n+r)) 平均O(d(n+r)) 最壞O(d(n+r) ) 空間:O(r) 穩定:是

9、桶排序
就想桶一樣……
時間:最好O(n) 平均O(n) 最壞O(n) 空間:O(n) 穩定:否

10、計數排序
假設n個輸入元素中的每一個都是在0到k區間內的一個整數,其中k爲某個數。當k=O(n)時,排序的運行時間爲O(n)。

点赞