算法的概念:解決特定問題求解步驟的描述,在計算機中表現爲指令的有限序列,而且每條指令表示一個或多個操做。一個問題能夠有多種算法,每種算法都不一樣的效率。一個算法具備的特徵:有窮,確切,輸入,輸出,可行算法
時間複雜度和空間複雜度的概念:算法分析的目的在於選擇合適算法和改進算法。數組
時間複雜度:執行算法所須要的計算工做量。通常來講,計算機算法是問題規模n的函數f(n),算法的時間複雜度記做T(n)=O(f(n))。問題的規模n越大,算法執行的時間的增加率與f(n)的增加率正相關,稱做漸進時間複雜度。函數
時間複雜度計算方式:得出算法的計算次數公式,用常數1來取代全部時間中的全部加法常數,在修改後的運行次數函數中,只保留最高階項,若是最高階存在且不是1,則去除與這個項相乘的常數排序
最壞狀況:最壞狀況時的運行時間,一種保證,若是沒有特別說明,說的時間複雜度即爲最壞狀況的時間複雜度;平均狀況:指望的運行時間遞歸
空間複雜度:算法須要消耗的內存空間,記做S(n)=O(f(n))。包括程序代碼所佔用的空間,輸入數據所佔用的空間和輔助變量所佔用的空間這三個方面。通常用複雜度的漸進性來表示。內存
空間複雜度計算方式:有時用空間換取時間,冒泡排序的元素交換,O(1)效率
排序算法:
冒泡排序:兩兩相鄰的數進行比較,若是反序就交換,不然不交換;時間複雜度最壞平均都爲O(n2),空間複雜度O(1)
直接插入排序:每次從無序表中取出第一個元素,把它插入到有序表的合適位置,使有序表仍然有序;時間複雜度最壞平均都爲O(n2),空間複雜度O(1)
希爾排序:把待排序的數據根據增量分紅幾個子序列,對子序列進行插入排序,直到增量爲1,直接進行插入排序;增量的排序,通常是數組的長度的通常,再變爲原來增量的一半,直到增量爲1;時間複雜度最壞爲O(n2)平均O(nlog2n),空間複雜度O(1)
選擇排序:每次從待排序的數據元素中選出最小或最大的一個元素,存放在序列的起始位置,直到所有待排序的數據元素排完;時間複雜度最壞平均都爲O(n2),空間複雜度O(1)
快速排序:經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按照此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸完成;時間複雜度最壞爲O(n2)平均O(nlog2n),空間複雜度最差O(n)平均O(nlog2n)
堆排序:把待排序的元素按照大小在二叉樹位置上排列,排序好的元素要知足:父節點的元素要大於等於子節點;這個過程叫作堆化過程,若是根節點存放的是最大的數,則叫作大根堆,若是是最小,就叫小根堆,能夠把根節點拿出來,而後再堆化,循環到最後一個節點;時間複雜度最壞爲O(nlog2n)平均O(nlog2n),空間複雜度最差O(n)平均O(nlog2n),空間複雜度O(1)
歸併排序:將兩個或以上有序表合併成一個新的有序表,即把待排序序列分爲若干個有序的子序列,再把有序的子序列合併爲總體有序序列;時間複雜度最壞爲O(nlog2n)平均O(nlog2n),空間複雜度O(n)變量
查找算法:
二分查找:從數組的中間元素開始,若是中間元素正好是要查找的元素,搜索結束,若是某一個特定元素大於或者小於中間元素,則在數組大於或者小於中間元素的那一半中查找,並且跟開始同樣從中間開始比較,若是某一步驟數組爲空,表明找不到;時間複雜度最壞爲O(log2n)平均O(log2n),空間複雜度迭代O(1)遞歸O(log2n)
順序查找:按必定的順序檢查數組中的每個元素,直到找到所要尋找的特定值爲止;時間複雜度最壞平均都爲O(n),空間複雜度O(1)二叉樹