資料結構 07 排序

2021-09-19 10:08:44 字數 1777 閱讀 9670

簡單的排序方法:氣泡排序、選擇排序、插入排序、希爾排序。

先進的排序方法:歸併排序、快速排序、堆排序、基數排序。

1.演算法思想

每次在未排序的元素中兩兩比較找最大值,邊找邊從後往前儲存(未排序...第i大、第2大、第1大)。

一般情況,整個氣泡排序只需進行 k(1<=k氣泡排序結束的條件是「在某一趟排序過程中沒有進行記錄交換的操作」,我們這裡設定個識別符號 flag 來控制。

2.**實現

void bubblesort(int array) 

}} }

3.效率分析

時間複雜度 o(n平方),空間複雜度 o(1)。

氣泡排序是一種 穩定的 排序方法。

1.演算法思想

每次從前往後在未排序的元素中找最小,邊找邊從前往後儲存(第1小、第2小...未排序)

2.**實現

void selectsort(int array) ;

for(int i=0; i=0&&temp3.效率分析

由於關鍵字的比較次數與元素的移動次數依賴於增量陣列中增量的選取,目前也沒有 給出最好的選取增量的辦法,所以時間複雜度也無法確定。

希爾排序是一種 不穩定的 排序方法。

1.演算法思想

遞迴實現:先遞迴拆分成兩個兩個的,再兩兩合併。

非遞迴實現:

2.**實現

3.效率分析

1.演算法思想

從陣列(子陣列)中取出乙個元素作為基準數(該元素稱為樞軸)。

將比基準數大的數全放到它的右邊,小於或等於基準數的全放到它的左邊。

再對左右兩部分重複第(1)(2)步,直到各區間只有乙個數,達到整個陣列有序。

2.具體操作過程

取陣列或陣列的子串行的首元素作為樞軸pivotkey;

之後檢測 arr[high]的值,若大於等於pivotkey,則 high 減1,否則將 arr[high] 移動到 下標為 low 的位置;

之後檢測 arr[low] 的值,若小於等於pivotkey,則 low 加1,否則將arr[low] 移至 陣列下標為 high 的位置;

重複進行上述兩個方向的檢測,直至 high 和 low 是同乙個下標為止。

3.**實現

static void qsort(int array, int low, int high) }

static int partition(int arr, int low, int high)

arr[low] = arr[high]; //將比樞軸小的移到左端

while(low4.效率分析

平均時間複雜度 o(n lb n),空間複雜度 o(lb n) ~ o(n)。

插入排序是一種 不穩定的 排序方法。

5.演算法優化

樞軸的選取是影響演算法效能的關鍵。

1.演算法思想

2.**實現

3.效率分析

1.演算法思想

2.**實現

3.效率分析

資料結構1 排序

就算複習再緊張,也要動手實踐資料結構中的基本演算法,徹底理解演算法的本質。不要讓任何理由成為不程式設計的藉口。從快速排序開始,將演算法問題一一攻克。複習提綱 基本資料結構 棧和佇列,陣列和鍊錶 樹和二叉樹 二叉查詢樹 平衡二叉樹 雜湊表 排序演算法 選擇排序 氣泡排序和快速排序 堆和堆排序 計數排序...

資料結構7 排序

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

資料結構1 排序

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