1、資料結構中的演算法,指的是資料結構所具備的功能。
2、解決特定問題的方法,他是前輩們的一些優秀的經驗總結。
把乙個大而複雜的問題,分解為很多個小的而簡單的問題,利用計算機的強大計算能力來解決問題。
是函式自己呼叫自己的一種行為,可以形成迴圈呼叫,進而實現分治演算法。
什麼情況下使用遞迴:
1、問題過於複雜無法拆解成迴圈語句。
2、問題非線性,而函式遞迴,由於借助棧記憶體,函式的每一此呼叫,就會把它的資料重新壓入棧空間,它的資料都會保留下來,可以解決非線性的問題(二叉樹的相關演算法,漢諾塔問題等)。
在單執行緒模式下永遠只能同時執行乙個函式,當函式自己呼叫自己時(子集),會先執行子集的**,然後子集執行完成後再返回到上一級繼續執行。
如何安全實現遞迴:
使用遞迴很有可能造成"死迴圈",非常耗費資源。
1、先寫出口,考慮如何讓無限的呼叫停止下來。
if(條件) return;
2、解決一處小問題
3、把剩下的問題交給我的下一級(引數發生變化)
遞迴的優點:
**簡單,容易理解。
遞迴的缺點:
容易形成死迴圈,耗費記憶體,執行效率低(引數入棧,出棧,區域性變數的定義、銷毀)。
順序查詢:從頭到尾逐一比較,對於資料沒有要求,但方法簡單,在小規模的資料查詢中比較實用,但效率低。
二分查詢:前提就是資料必須有序,然後從資料的中間位置開始查起,若中間位置的資料比要查詢的位置小,則從中間位置的左邊找,否則從右邊找。
從**實現上來說,既可以用迴圈實現,也可以用遞迴實現。
塊查詢、權重查詢,適用於特殊條件下,需要對資料進行排序、分析、總結、歸納。
排序演算法的穩定性:當序列中有相等的資料時,演算法會不會改變這兩個資料的前後位置。
冒泡: 是一種穩定排序,在排序過程中可以監測到資料是否已經有序(對資料的有序性敏感),可以立即停止,如果待排序的資料基本有序,則冒泡的效率是非常高的。
插入排序:
是一列數已經有序,再有新加入的資料時,適合使用插入排序。
選擇排序:
是氣泡排序的一種變種,但是它沒有冒泡對資料有序性的敏感,但它在排序過程中比冒泡少了很多資料交換,因此要比冒泡要快(資料比較混亂的情況下)。
快速排序:
一種基於交換的一種排序。
堆排序:
首先把資料當作完全二叉樹,然後保障根結點最大,然後把根結點與最後乙個元素交換,然後再調整二叉樹(逐漸減少陣列),讓根依然保持最大,然後重複上次操作。
歸併排序:
不交換資料,但需要借助額外的空間,用作臨時的儲存空間。
除了這些排序演算法,還有很多其它的排序演算法
Python資料結構與演算法學習第五天
棧可以用順序表實現,也可以用鍊錶實現。棧的操作 1.stack 建立乙個新的空棧 2.push item 新增乙個新的元素item到棧頂 3.pop 彈出棧頂元素 4.peek 返回棧頂元素 5.is empty 判斷棧是否為空 6.size 返回棧的元素個數 實現 利用順序表 上圖 為定義類。上圖...
資料結構第五天
1.氣泡排序 氣泡排序重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越大的元素會經由交換慢慢 浮 到數列的頂端,故名。步驟 比較相鄰的元素。如果第乙個比第二個大,就交...
資料結構 第五天 佇列
只允許在一端進行插入操作,而在另一端進行刪除操作的線性表,即是一種先進先出 fifo 的線性表。抽象資料型別 adt 佇列 queue data 元素具有相同的型別,相鄰的元素具有前驅和後繼的關係 operation initqueue q 初始化操作,建立乙個空佇列q destroyqueue q...