資料結構1 排序

2021-06-08 11:23:24 字數 1480 閱讀 3051

就算複習再緊張,也要動手實踐資料結構中的基本演算法,徹底理解演算法的本質。不要讓任何理由成為不程式設計的藉口。從快速排序開始,將演算法問題一一攻克。複習提綱:

基本資料結構:

棧和佇列,陣列和鍊錶

樹和二叉樹

二叉查詢樹

平衡二叉樹

雜湊表

排序演算法:

選擇排序、氣泡排序和快速排序

堆和堆排序

計數排序、基數排序和桶排序

搜尋演算法、貪心演算法和動態規劃:

深度優先搜尋和廣度優先搜尋

搜尋時的剪枝

貪心演算法和赫夫曼編碼

動態規劃

圖論:拓撲排序

強聯通分量

最小生成樹

單源最短路

二分圖匹配

網路流

其它演算法:

數學演算法

字串匹配和自動機

計算幾何學(凸包和最近/最遠點對)

字尾樹和字尾陣列

《資料結構與演算法分析-c++描述》

《c++資料結構原理與經典問題求解》

quicksort是在目前最快排序演算法,它的平均執行時間是o(nlogn),最壞情形的效能為o(n^2),空間複雜度為o(n)。它採取了一種分治策略,其基本思想是取待排序物件序列中的某個物件為基準,按照其值將物件序列劃分為左右兩個子串行,左側的元素都小於或等於基準值,右側的元素都大於或等於基準值。然後分別對左右子列重複上述操作,直到排序完畢。

將陣列s排序的基本演算法由以下4步組成:

(1).如果s中元素個數是0或1,則返回。

(2).取s中任一元素v,稱之為樞紐元(pivot)。

(3).將s-(s中其餘元素)劃分成為兩個不相交的交集:s1 = | x <= v}和 s2 = | x >= v}。

(4).返回。

過程如下:

13 81 33 24 45 9 78 0 (排序之前)

13 81 3324

45 9 78 0 (選取pivot 24)

[13 9 0]

24[33 45 78 81] (劃分左右子列)

重複(2)(3)(4),對左右子列進行遞迴呼叫快速排序,直到(1)成立,排序完成。

//快速排序:劣質版

#include int partition2(int data,int l,int h)

{ int i=l;

int j=h;

int privot = data[l];//每次都選取第乙個元素作為樞紐元

while (i=privot && i

快速排序的時間為左右子列的排序時間加上分割所花的線性時間(樞紐元的選取耗時為常數,這裡不考慮):

t(n) = t(i) + t(n-i-1) +cn

最壞情況分析:

資料結構1 排序

關鍵字相同的項排序後順序不變就是穩定的排序演算法,否則是不穩定的排序演算法。排序分為內部排序和外部排序,內部排序只需要訪問記憶體,外部排序還需要訪問外存。1.氣泡排序 穩定排序演算法 很經典簡單的方法,每個數字從最下面開始一層一層往上走,像冒泡泡一樣。冒泡是用兩個巢狀的for迴圈實現的,基本操作 比...

資料結構 07 排序

簡單的排序方法 氣泡排序 選擇排序 插入排序 希爾排序。先進的排序方法 歸併排序 快速排序 堆排序 基數排序。1.演算法思想 每次在未排序的元素中兩兩比較找最大值,邊找邊從後往前儲存 未排序.第i大 第2大 第1大 一般情況,整個氣泡排序只需進行 k 1 k氣泡排序結束的條件是 在某一趟排序過程中沒...

資料結構7 排序

理解選擇排序的不穩定性 選擇排序 氣泡排序 插入排序 public int charusort int intarr for int i 1 i intarr.length i return intarr 正確性檢測 test public void sorttest system.out.prin...