算法(2)

查找

順序查找
從頭到尾逐一比較,對於數據沒有要求,但方法簡單,在小規模的數據查找中比較常用,但效率低
二分查找
前提就是數據必須有序,然後從數據的中間位置開始查起(比中間數小往左查,比中間大往右查),如果中間值比key小,則從中間位置開始繼續查找,反之從開頭到中間位置查找,重複以上過程直到結束
從代碼實現角度來說,既可以用循環實現,也可以用遞歸實現
塊查找,權重查找
適用於特殊條件下,需要對數據進行排序、分析、總結、歸納

排序

排序算法的穩定性
當序列中有相等的數據時,算法會不會改變這兩個數據的前後位置

冒泡排序(穩定)
是一種穩定排序,在排序過程中可以監測到數據是否已經有序(對數據的有序性敏感),可以立即停止,如果待排序的數據基本有序,則冒泡的效率是非常高的
插入排序(穩定)
當一列數已經有序,再有新加入的數據時,適合使用插入排序
選擇排序(不穩定)
是冒泡排序的一種變種,但是它沒有冒泡對數據有序性的敏感,但它在排序過程中比冒泡要少了很多數據交換,因此在數據比較混亂的情況下要比冒泡要快
快速排序(不穩定)
一種基於交換的排序
堆排序(不穩定)
首先把數據當作完全二叉樹,然後保證根結點最大,然後把根結點與最後一個元素交換,然後再調整二叉樹(逐漸減少數組,讓根依然保持最大,重複上次操作
歸併排序(穩定)
不交換數據,但需要藉助額外的空間,用作臨時的存儲空間

算法的時間複雜度

注意:時間複雜度並不是指算法運行所需要的時間,而是算法執行的次數
一般來講:單循環O(n),雙循環O(n^2)

冒泡排序:O(n),O(n^2)
插入排序:O(n),O(n^2)
選擇排序:O(n2),O(n2)
快速排序:O(nlog2 n),O(n^2)
堆排序:O(nlog2 n),O(nlog2 n)
歸併排序:O(nlog2 n),O(nlog2 n)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章