作為《大話資料結構》的筆記
一、什麼是排序
假設含有n個記錄的序列{R1,R2,...,Rn},其相應的關鍵字分別為{k1,k2,...,kn},需確定1,2,...,n的一種排列p1,p2,...,pn,使其相應的關鍵字滿足kp1<=kp2<...<=kpn非遞減(或非遞增)關係,即使得序列成為一個按關鍵字有序的序列{Rp1,Rp2,...,Rpn},這樣的操作就稱為排序。
Ex:ABCD的成績如下
A 75
B 98
C 63
D 87
按成績從大到小排序 結果為BDAC
二、排序的穩定性
假設ki=kj(1<=i<=n,1<=j<=n,i!=j),且在排序前的序列中Ri領先於Rj(即i<j)。如果排序後Ri仍領先於Rj,則稱所用的排序方法是穩定的;反之,若可能使得排序後的序列中Rj領先Ri,則稱所用的排序方法不穩定。
Ex:ABCD的原排列如下
A 75
B 75
C 87
D 96
穩定的排序結果 DCAB(AB的相對位置沒有變)
不穩定的排序結果 DCBA(AB的相對位置變了)
三、內排序與外排序
根據在排序過程中待排序的記錄是否全部被放置在記憶體中,排序分為:內排序和外排序
內排序是在排序整個過程中,待排序的所有記錄全部被放置在記憶體中。
外排序是由於排序記錄個數太多,不能同時放置在記憶體,整個排序過程需要在內外存之間多次交換資料才能進行。
四、內排序的演算法效能(這裡介紹的演算法都是內排序)
1、時間複雜度
在內排序中,主要進行兩種操作:比較和移動。比較指關鍵字之間的比較,這是要做排序最起碼的操作。移動指記錄從一個位置移動到另一個位置。高效率的內排序演算法應該是具有儘可能少的關鍵字比較次數和 儘可能少的記錄移動次數。
2、空間複雜度
除了存放待排序所所佔用的儲存空間之外,執行演算法所需要的其他儲存空間。
五、分類
按照演算法的複雜度分為兩大類
簡單演算法:冒泡排序、簡單選擇排序、直接插入排序
改進演算法:希爾排序、堆排序、歸併排序、快速排序
我們學習這些排序演算法的目的更多並不是為了去在現實中編程排序演算法,而是通過學習來提高我們編程演算法的能力,以便於去解決更多複雜和靈活的應用性問題。