演算法漫談 查詢和排序及資料結構

2021-07-12 06:12:13 字數 818 閱讀 4625

一直以來,覺得演算法是乙個比較高深的東西,雖然大學研究生都學習過,但在實際專案中,用的比較少,也只有用到的時候才會去研究相應的演算法。從來沒有深入系統的研究總結過,現在由於專案和其他原因,需要對演算法做乙個系統學習,為了督促自己,將自己的心得記錄下來,以方便與他人**。

首先是講講查詢和排序。

演算法是解決實際問題的邏輯思維,並假借資料結構實現。解決實際問題最基本的演算法當屬查詢和排序。其實我個人覺得排序是為了查詢。單純的排序沒有意義。只有在海量的資料中找到我們需要的物件,進而才能進行相關操作。排序就是「磨刀不誤砍柴工」中的磨刀步驟,因為有序集合可以很容易採用一些策略加速查詢。

「1對1」,就是線性表。某乙個元素只有唯一前驅和唯一後繼。

「1對多」,就是樹。某乙個元素有多個後繼。

「多對多」,就是圖。 某乙個元素前驅後繼都有多個。

而用於儲存這些資料結構的物理方式可分為連續儲存和非連續儲存。連續儲存如陣列,非連續儲存如鍊表。通常連續儲存就可以隨機訪問,用下標方式實現,但通常情況下,增刪查都不是很方便,需要移動大量元素。相反,鍊錶則增、刪等操作都很方便,常數級可完成,但遍歷則需要一定時間。

樹可以用陣列方式來儲存,如二叉完全樹可用一維陣列實現 ,也可用鍊錶實現 。

圖不同的表達方式也可分別不同的儲存。如鄰接矩陣可用二維陣列來儲存,但當出現稀疏矩陣的情況下,陣列會很浪費空間,這時可用鄰接表的方式來實現。

評價演算法應該在特定應用環境下,每種演算法都有一定的適用範圍,普適的演算法只是解決問題的基礎,需要根據應用不同做差異化優化。

演算法的這種差異化優化體現在時間和空間花費的平衡上,若對時間敏感,則可空間換時間;若資源有限,則可用時間來換空間。

上述即為今日學習之感悟。

資料結構 排序和查詢

氣泡排序 void bubblesort elemtype r,int n,int comp num,int move num if flag 0 break 快速排序 void quicksort elemtype r,int left,int right,int comp num,int mov...

java資料結構和演算法 基本查詢排序

1.二分法查詢 public class binaryfindarray private static int elems arr.length public static int find int searchkey else if low pow else else public static ...

資料結構和演算法 排序

一 簡單排序 1.氣泡排序o n 2 兩兩比較,反序交換 public static int bubblesort int arr return arr 2.選擇排序o n 2 public static int selectsort int arr if i minindex return arr...