三交換排序
四選擇排序
五歸併排序
六基數排序
七各種內部排序演算法的比較
排序:把乙個無序的元素序列按照元素的關鍵字遞增或遞減排列為有序的序列。
假設包含n個元素(記錄)的的序列(e
1,e2
,….,
en) 對應的關鍵字為(k
1,k2
,…,k
n),需確定1,2,…,n的一種排列p1
,p2,
…,pn
,使關鍵字滿足非遞減(或非遞增)關係kp
1≤kp
2≤…≤
kpn ,從而使元素構成乙個非遞減(或非遞增)的序列(e
p1,e
p2,…
.,ep
n),這個的一種操作被稱為排序。
穩定排序和不穩定排序:在待排序的記錄序列中,若存在兩個或兩個以上關鍵字相等的記錄。假設ki
=kj(
1≤i≤
n,1≤
j≤n,
i≠j)
,且排序前對應的記錄ei
(即i<
j )。在排序之後,如果元素ei
仍領先於ej
,則稱這種排序採用的方法是穩定的。如果經過排序之後元素ej
領先於ei
,則稱這種排序方法是不穩定的。
內排序和外排序:由於待排序的記錄數量不同,使得排序過程中涉及的儲存器不同,可將排序方法分為內部排序和外部排序兩類。內部排序也稱內排序,指的是待排序記錄存在在計算機隨機儲存器中進行的排序過程;瓦布排序也稱為外排序,指的是是待排序記錄的資料量很大,一致記憶體不能容納全部記錄,在排序的過程中需要不斷對外存進行訪問的排序過程。
乙個排序演算法的好壞主要可以通過時間複雜度、空間複雜度和穩定性來衡量。無論演算法穩定還是不穩定,都不會影響到排序的最終結果。通常只考慮比較關鍵字的次數和移動記錄的次數。當關鍵字是字串時,比較關鍵字要占用較多的時間,是影響時間複雜性的主要因素。而當記錄很大時,為了交換記錄的位置,移動記錄成為影響時間複雜性的主要因素。
在排序過程中需要一下兩種基本操作:
比較兩個元素相應關鍵字的大小。第一種操作對大多數排序演算法來說是必要的,第二中操作可通過改變記錄的儲存方式避免。將元素從乙個位置移動到另乙個位置。
待排序的記錄序列可由下列3中儲存方式:
順序儲存:待排序的元素儲存在一組連續的儲存單元中,這類似於線性表的順序儲存,在序列中相鄰的兩個記錄ei和ej,它們的物理位置也相鄰。在這種儲存方式中,記錄之間的次序關係由其儲存位置決定,則實現排序必須移動記錄。
鏈式儲存:待排序的元素儲存在一組不連續的儲存單元中,這類似於線性表的鏈式儲存,序列中相鄰的兩個記錄ei
和ej,它們的物理位置不一定相鄰。在這種儲存方式中,不需要移動元素,只需要修改指標即可。
靜態鍊錶:待排序記錄存放在靜態鍊錶中,記錄之間的關係由被稱為游標的指標指示,實現排序不需要移動元素,只需要修改游標即可。
#define maxsize 100
typedef
int keytype;
typedef
struct
/*資料元素型別定義*/
datatype;
typedef
struct
/*順序表型別定義*/
sqlist;
內部排序演算法
內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。1.快速排序int partition int a,int low,int high a low a high while low2.並歸排序 void merging int list1,int list1 size,i...
內部排序演算法
內部排序演算法就是指記憶體中的排序演算法,而外部排序演算法則是指待排序資料過多,無法一次性載入到記憶體中,排序過程需要讀取磁碟,因此需要考慮磁碟 io 的消耗!內部排序演算法按照操作型別可大致分為五類 插入排序 交換排序 選擇排序 歸併排序 計數排序 內部排序演算法按照時間複雜度可大致分為三類 簡單...
內部排序演算法 選擇排序
選擇排序法可使用兩種方式排序 從小到大或從大到小 例如 當n個資料需要由大至小排序時,首先將第乙個位置的資料依次和第2 3 4 n個位置的資料進行比較。如果資料大於或等於其中乙個位置,則不變 若小於其中乙個位置的資料,則兩個位置的資料互換。互換後第1個位置的資料繼續與後續位置的資料進行比較,直到位置...