1. 程式人生 > >資料結構+演算法_溫故知新系列_第8章排序

資料結構+演算法_溫故知新系列_第8章排序

第8章 排序

8.1 概述:

1. 排序的定義:將一組雜亂無章的資料按一定規律順次排列起來。

2. 排序的目的:方便查詢。

3. 內外排序區分:若待排序記錄都在記憶體中,稱為內部排序。若待排序記錄一部分在記憶體,一部分在外存,則稱為外部排序。(外部排序時,要將資料分批調入記憶體來排序,中間結果還要及時放入外存,顯然外部排序要複雜得多)

4 排序演算法好壞的衡量標準:時間效率/空間效率/穩定性

 

8.2 插入排序

基本思想:

每步將一個待排序的物件,按其關鍵碼大小,插入到前面已經排好序的一組物件的適當位置上,直到物件全部插入為止。(即一邊插入一邊排序,保證子序列中隨時都是排好序的)

插入排序分類:

A: 直接插入排序(基於順序查詢)

排序過程:整個排序過程為n-1趟插入,即先將序列中第1個記錄看成是一個有序子序列,然後從第2個記錄開始,逐個進行插入,直至整個序列有序;

時間O(n)=n^2

空間O(n)=1

穩定性:穩定的排序;

 

B:折半插入排序(基於折半查詢)

減少了比較的次數,但並未減少移動的次數,平均效能比直接插入排序好;

時間O(n)=n^2

空間O(n)=1

穩定性:穩定的排序;

 

C: 希爾排序 (基於逐趟縮小增量)

先將整個待排記錄序列分割成若干子序列,分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行一次直接插入排序;

時間O(n^(1.3—2)) 想要弄清關鍵詞比較次數和記錄移動次數與增量選擇之間的關係,並給出完整的數學分析,今仍然是數學難題。

空間:O(n)=1

穩定性:不穩定的排序

 

8.3 交換排序

基本思想:

兩兩比較,如果發生逆序則交換,直到所有記錄都排好序為止;

 

A: 氣泡排序

基本思想:每趟不斷將記錄兩兩比較,並按“前小後大”規則交換

時間O(n)=n^2

空間O(n)=1

穩定性:穩定的排序

 

B: 快速排序

基本思想:

任意一個元素(如第一個)為中心,所有比它小的元素都前放,比它大的元素都後放,形成兩個左右子表,對各個子表重新選擇中心元素並依此規則調整,直到子表的元素只有一個元素;

時間O(n)=nlogn

空間O(n)=logn

穩定性:不穩定的排序

 

8.4 選擇排序

A:直接選擇排序:

基本思想:

每一趟在後面n-i-1箇中宣傳關鍵碼最小的物件,作為有序序列的第i個記錄;

時間O(n)=n^2

空間O(n)=1

穩定性:不穩定的排序

 

 

 

一邊複習,一邊記錄,還有部分內容,未完待續,慢慢補上!!!