前言:html
這裏是修真院前端小課堂,每篇分享文從前端
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】git
八個方面深度解析前端知識/技能,本篇分享的是:程序員
【JS常見的排序算法 】github
你們好,我是IT修真院北京分院第20期的學員王野,一枚正直純潔善良的程序員算法
今天給你們分享一下,修真院官網JS任務4,深度思考中的知識點——JS常見的排序算法數組
1、背景介紹ui
算法(Algorithm)是指解題方案的準確而完整的描述,是一系列解決問題的清晰指令,算法表明着用系統的方法描述解決問題的策略機制。也就是說,可以對必定規範的輸入,在有限時間內得到所要求的輸出。若是一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不一樣的算法可能用不一樣的時間、空間或效率來完成一樣的任務。一個算法的優劣能夠用空間複雜度與時間複雜度來衡量。編碼
2、知識剖析spa
算法的特色
1.有限性(Finiteness):一個算法必須保證執行有限步以後結束。
2.確切性(Definiteness): 一個算法的每一步驟必須有確切的定義。
3.輸入(Input):一個算法有零個或多個輸入,以刻畫運算對象的初始狀況,所謂零個輸入是指算法自己給定了初始條件。
4.輸出(Output):一個算法有一個或多個輸出。沒有輸出的算法毫無心義。
5.可行性(Effectiveness):算法中執行的任何計算步驟都是能夠被分解爲基本的可執行的操做步,即每一個計算步均可以在有限時間內完成(也稱之爲有效性)。
3、常見問題
幾種常見算法的寫法及實現
4、解決方案 編碼實戰
冒泡排序(Bubble Sort)
思想:每一次對比相鄰兩個數據的大小,小的排在前面,若是前面的數據比後面的大就交換這兩個數的位置
實現:須要用到兩層for循環,外層從第一個數到倒數第二個數,內層從外層的後面一個數到最後一個數
特色:排序算法的基礎。簡單實用易於理解,缺點是比較次數多,效率較低。
冒泡排序
快速排序(Quick Sort)
思想:先找到一個基準點(通常指數組的中部),而後數組被該基準點分爲兩部分,依次與該基準點數據比較,若是比它小,放左邊;反之,放右邊。
左右分別用一個空數組去存儲比較後的數據。最後遞歸執行上述操做,直到數組長度<=1;
特色:快速,經常使用。缺點是須要另外聲明兩個數組,浪費了內存空間資源。
快速排序
插入排序(Insertion Sort)
(1) 從第一個元素開始,該元素能夠認爲已經被排序
(2) 取出下一個元素,在已經排序的元素序列中從後向前掃描
(3) 若是該元素(已排序)大於新元素,將該元素移到下一位置
(4) 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
(5)將新元素插入到下一位置中
(6) 重複步驟2
插入排序
5、擴展思考
這幾種排序算法的優缺點
n: 數據規模
k:「桶」的個數
In-place: 佔用常數內存,不佔用額外內存
Out-place: 佔用額外內存
穩定性:排序後2個相等鍵值的順序和排序以前它們的順序相同
JS常見的排序算法及實現
6、參考文獻
7、更多討論