3.2 快速排序
4.main函式
5.小結
【說明】以下**實現最終均為遞增序列,即從小到大排序。
#include
#define elemtype int
/*函式宣告*/
void
swap
(int& a, int& b)
;//1-1.交換
void
bubblesort
(elemtype a
, int n)
;//1-2.氣泡排序
int partition
(elemtype a
, int low, int high)
;//2-1.劃分
void
quicksort
(elemtype a
, int low, int high)
;//2-2.快速排序
//1-1.交換
void
swap
(int& a, int& b)
//1-2.氣泡排序
void
bubblesort
(elemtype a
, int n)
if(flag ==
false
)return
;//本趟遍歷沒有發生交換,說明表已經有序,提前結束演算法
}}
//2-1.劃分
int partition
(elemtype a
, int low, int high)
a[low]
= pivot;
//樞軸元素存放到最終位置
return low;
//返回存放樞軸的最終位置
}
//2-2.快速排序
void
quicksort
(elemtype a
, int low, int high)
}
int main()
;bubblesort(a
,10);
for(int i =
0; i <
10; i++
)printf
("%d\t",a
[i])
;printf
("\n");
//2.快速排序
elemtype b
=;quicksort(b
,0,9
);for(int i =
0; i <
10; i++
)printf
("%d\t",b
[i])
;return0;
}
一、交換排序的概念
二、關於兩種交換排序的效能分析
氣泡排序
空間複雜度:o(1)
時間複雜度:o(n2)
穩定性:穩定
適用性:適用於順序儲存和鏈式儲存的線性表
快速排序
①空間複雜度=o(遞迴層數)
---->最好情況:o(log2n)
---->最壞情況:o(n)
---->平均情況:o(log2n)
②時間複雜度=o(n*遞迴層數)
---->最好情況:o(nlog2n)
---->最壞情況:o(n2)
---->平均情況:o(nlog2n)
穩定性:不穩定
適用:僅適用於順序儲存的線性表
【注】:快速排序在所有內部排序演算法中平均效能最優
三、其他說明
氣泡排序較為簡單,重點掌握快速排序,並且手寫**。
交換排序的重要特點
(1) 對氣泡排序來說,每經過一趟冒泡則必有乙個元素會放在其最終的位置上。
(2) 對快速排序來說
①經過一次劃分,則會有乙個元素會放在其最終的位置上
②經過一趟排序,如果樞軸靠邊,則第二趟排序會有乙個元素會放在其最終的位置上;若樞軸不靠邊,則第二趟會有兩個元素確定其最終的位置。
上述特點可作為判斷是否進行了氣泡排序或快速排序以及進行了幾趟的依據
資料結構 交換排序
交換排序的基本思想是 兩兩比較待排序記錄的關鍵字,如果發生逆序 即排列順序與排序後的次序正好相反 則交換之,直到所有記錄都排好序為止。基本思路 每趟不斷將記錄兩兩比較,並按 前小後大 或 前大後小 規則交換。優點 每趟結束時,不僅能擠出乙個最大值到最後面位置,還能同時部分理順其他元素 一旦下趟沒有交...
資料結構 排序之交換排序
本節將兩種交換排序氣泡排序和快速排序 氣泡排序是最簡單的交換排序方法,比較相鄰兩個記錄的關鍵字,將大的放到右邊,小的放到左邊,如圖所示 從而使關鍵字小的左移 大的右移 每一次迴圈最右邊的必定是關鍵字最大的元素,外面再加一層迴圈即可得到有序序列。實現 include using namespace s...
2 內部排序 交換排序
交換排序 氣泡排序 基本思想很簡單,如果要求排序後序列中元素按照從小到大的順序排列,則氣泡排序的步驟如下 1 依次比較序列中相鄰的兩個元素,將較大的放在後面,這樣一趟比較後,最大的元素就放在了最後的乙個位置 2 再依次比較相鄰的兩個元素,將第二大的元素最終放到倒數第二個位置 3 依次迴圈,直到最小的...