1. 程式人生 > >內排序與外排序+內排時間複雜度等效能總結

內排序與外排序+內排時間複雜度等效能總結

內排序與外排序

根據在排序過程中待排序的記錄是否全部被放置在記憶體中,排序分為:內排序和外排序。

內排序是在排序整個過程中,待排序的所有記錄全部被放置在記憶體中。外排序是由於排序的記錄個數太多,不能同時放置在記憶體,整個排序過程需要在內外存之間多次交換資料才能進行。我們這裡主要就介紹內排序的多種方法。

對於內排序來說,排序演算法的效能主要是受3個方面影響:

1.時間效能

排序是資料處理中經常執行的一種操作,往往屬於系統的核心部分,因此排序演算法的時間開銷是衡量其好壞的最重要的標誌。在內排序中,主要進行兩種操作:比較和移動。比較指關鍵字之間的比較,這是要做排序最起碼的操作。移動指記錄從一個位置移動到另一個位置,事實上,移動可以通過改為記錄的儲存方式來予以避免(這個我們在講解具體的演算法時再談)。總之,高效率的內排序演算法應該是具有儘可能少的關鍵字比較次數和儘可能少的記錄移動次數。

2.輔助空間

評價排序演算法的另一個主要標準是執行演算法所需要的輔助儲存空間。輔助儲存空間是除了存放待排序所佔用的儲存空間之外,執行演算法所需要的其他儲存空間。

3.演算法的複雜性

注意這裡指的是演算法本身的複雜度,而不是指演算法的時間複雜度。顯然演算法過於複雜也會影響排序的效能。

根據排序過程中藉助的主要操作,我們把內排序分為:插入排序、交換排序、選擇排序和歸併排序。可以說,這些都是比較成熟的排序技術,已經被廣泛地應用於許許多多的程式語言或資料庫當中,甚至它們都已經封裝了關於排序演算法的實現程式碼。因此,我們學習這些排序演算法的目的更多並不是為了去在現實中程式設計排序演算法,而是通過學習來提高我們編寫演算法的能力,以便於去解決更多複雜和靈活的應用性問題。

本章一共要講解七種排序的演算法,按照演算法的複雜度分為兩大類,氣泡排序、簡單選擇排序和直接插入排序屬於簡單演算法,而希爾排序、堆排序、歸併排序、快速排序屬於改進演算法。後面我們將依次講解。