第9章 排序

2021-08-17 02:53:31 字數 1993 閱讀 5604

9.1 開場白

購物**根據信用選擇商品就是排序的過程

9.2 排序的基本概念與分類

排序的依據是關鍵字之間的大小關係。

9.2.1 排序的穩定性

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

內排序是在排序整個過程中,待排序的所有記錄全部放置在記憶體中。

外排序是由於排序的記錄個數太多,不能同時放置在記憶體,整個排序過程需要在內外存之間多次交換資料才能進行

1 時間效能

排序是資料處理中經常執行的一種操作,往往屬於系統的核心部分,因此排序演算法的時間開銷是衡量其好壞的最重要的標誌。

內排序中主要兩種操作:比較和移動。高效的內排序演算法應該是具有盡可能少的關鍵字比較次數和盡可能少的記錄移動次數

2 輔助空間

評價排序演算法的另乙個主要標準是執行演算法所需要的輔助儲存空間。

3 演算法的複雜性

演算法的本身複雜度。

根據排序過程中的主要操作,內排分為插入排序、交換排序、選擇排序和歸併排序

9.2.3 排序用到的結構和函式

#define maxsize 10

typedef struct

sqlist;

void swap(sqlist *l,int i,int j)
9.3 氣泡排序

9.3.1 最簡單的排序實現

氣泡排序是一種交換排序,基本思想是:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止  

//對順序表l做交換排序(氣泡排序初級版)

void bubblesort0(sqlist *l)

}}

這段**嚴格意義上將不算是標準的氣泡排序,不滿足兩輛比較相鄰記錄

它的思路就是讓每乙個關鍵字都和它後面的每乙個關鍵字比較,如果大則交換,這樣第一位置的關鍵字在一次迴圈後一定變成最小值

9.3.2 氣泡排序演算法    

//對順序表l做氣泡排序

void bubblesort(sqlist *l)}}

}

9.3.3 氣泡排序優化

//對順序表l做改進氣泡排序

void bubblesort2(sqlist *l)

}}

9.3.4 氣泡排序複雜度分析

分析一下它的時間複雜度。總的時間複雜度為o(n的平方)

9.4 簡單選擇排序

9.4.1 簡單選擇排序演算法

9.4.2 簡單選擇排序複雜度分析

9.5 直接插入排序

9.5.1 直接插入排序演算法

9.5.2 直接插入排序演算法複雜度分析

9.6 希爾排序

9.6.1 希爾排序原理

9.6.2 希爾排序演算法

9.6.3 希爾排序複雜度分析

9.7 堆排序

9.7.1 堆排序演算法

9.7.2 堆排序複雜度分析

9.8 歸併排序

9.8.1 歸併排序演算法

9.8.2 歸併排序複雜度分析

9.8.3 非遞迴實現歸併排序

9.9 快速排序

9.9.1 快速排序演算法

9.9.2 快速排序複雜度分析

9.9.3 快速排序優化

9.10 總結回顧

9.11 結尾語

第9章 引用

為了列印出特殊字元,我們需要通過使用反斜槓來引用它們。下面是總結的特殊字元 字元含義 使用者的主目錄 命令替換 注釋變數引用 把任務放到後台執行 萬用字元萬用字元 在子shell中執行 引用後面的乙個字元 管道指定乙個字符集的萬用字元 建立乙個命令塊 命令分隔符 單引號引用字元 雙引號引用字元 標準...

第9章 模板

函式模板 類模板 一 函式模板 1.函式模板可以用來建立乙個通用功能的函式,以支援多種不同形參,進一步簡化過載函式的函式體設計。2.定義方法 template 模板參數列 3.函式定義 模板參數列的內容 型別引數 class 或typename 識別符號 常量引數 型別說明符 識別符號 模板引數 t...

第9章例題 7 2 學生成績排序

假設學生的基本資訊包括學號 姓名 三門課程成績以及個人平均成績,定義乙個能夠表示學生資訊的結構型別。輸入n n 50 個學生的成績資訊,按照學生的個人平均分從高到低輸出他們的資訊。如果平均分相同,按輸入的先後順序排列。輸入格式 輸入乙個正整數n n 50 下面n行輸入n個學生的資訊,包括 學號 姓名...