第8章 資料排序 資料結構設計與C++程式應用

Slides:



Advertisements
Similar presentations
Software Learning Resource Service Platform CHAPTER 7 搜尋和排序 (Search and Sort) 1.
Advertisements

第一节三 怎样实现合理膳食. 饮食与健康 探 究 竟探 究 竟 1. 根据课本后的部分食物营养成分表(附表一),分组将聪聪和明明一天所吃的 食物重量分别换算成糖类、蛋白质、脂肪和钙的重量。 聪聪(女 12 岁)明明(男 13 岁) 鸡 蛋 75g 油 条 200g 牛 奶 250g.
《地方名人文化资源网站的建设与应用研究》. 乐至名人 叶 镛 KJ09001 乐至县吴仲良中学 邓祖明.
延边大学 2016年度本科专业评估指标体系解读.
理念是教育的灵魂 行动是成功的保证 咸阳底张学区小学段 课程改革研讨报告 2011年4月.
主题8 对教学设计与实施的评价 讲课教师:关坤
消防知识进校园 珠海市公安消防局 贾博.
墨子選 非攻.
野薑花有機生態教育農場 主講人 林進財.
《天津市建设工程监理企业信用评价办法》 介绍.
一條美麗的銀蠹魚 從水經注裡游出來-──亞弦 讓晶瑩剔透的文字,停駐在我們心中-淺談新詩教學
初级会计实务 第二章 负债(三) 主讲人:杨菠.
長平之戰是戰國後期一場決定性戰役,秦將白起充分利用地利之便,採後退誘敵、合圍殲滅的戰術。
作者简介: 闻一多(1899-1946) ,湖北浠水人,前新月派诗人和新格律诗理论的奠基者,著名的诗人、学者、民主战士。 其新歌创作的主要成就是两部诗《红烛》(1923)《死水》(1928) 浓烈而真挚的爱国情思是其诗歌的灵魂。 朱自清曾称赞闻一多是五四时期“唯一的爱国诗人”。 闻一多诗歌理论的核心是讲究“三美”:
——解读《国务院办公厅关于继续深入开展 “安全生产年”活动的通知》
第三课:我国政府是人民的政府 3.2政府的责任:对人民负责.
幼托教師的在職教育訓練 第三組 498i0052蕭羽婷 498i0053 顏于淨 498i0058 黃祺婷 498i0059 林怡均
第一节 工业的区位因素与区位选择 【考点1】工业的区位因素 1.常见的工业区位因素 (1)自然因素:土地、原料、动力、水源等。 (2)社会经济因素:交通、劳动力、市场、政府政策、工农业基础、个人偏好、环境等。 2.影响不同工业部门的主导因素 列表分析不同的工业部门在区位选择时需要考虑的主导因素:
禁毒知识教育 ·.
第一章 国际私法的概念 第一节 国际私法的调整对象 第二节 国际私法的范围 第三节 国际私法的性质 第四节 国际私法的名称
第九课 第二框 世界多极化:不可逆转.
《钢铁是怎样炼成的》 语段精读.
碘缺乏病.
近代化 小农经济,铁犁牛耕 古老 男耕女织,肩挑背驮 中国 君主专制,文化专制 农耕文明 闭关锁国,天朝上国 近代 西方 工业文明 经济工业化/城市化 政治民主化/法治化 思想理性化/科学化.
第5章 排序与查找 PART A 《可视化计算》.
第四课 恪守职业道德 我爱岗 我敬业.
第七章 诉讼参加人.
第八章了解法律制度自觉遵守法律.
高中历史多媒体课件 高中历史多媒体课件 隋唐时期政治经济概况. 高中历史多媒体课件 高中历史多媒体课件 隋唐时期政治经济概况.
一、考试范围 二、考试要求 三、近几年中考题型及解答技巧 四、近来复习中出现的问题 五、采取的措施 六、中考热点复习
<<广东省中小学生体能素质评价标准>>
Principles and Applications of the Database
第一篇:静力学 1 、研究的主要问题:力,力系的简化原理 及物体在力系作用下的平衡问题。 2 、研究方法:对物体(或物体系)进行受
文學與生活-期末報告 赤壁之戰 組員名單 : 4A2L0031 王柔之 4A2L0033 劉兆偉 4A0L0063 謝商裕
必修三 稳态与环境 第5章生态系统及其稳定性 第5节 生态系统的稳定性.
近代中国经济结构的变动.
面向海洋的开放地区——珠江三角洲 山东省高青县实验中学:郑宝田.
人口迁移与人口流动.
第八章 财务分析与评价.
思想政治选考数据分析 绍兴市教育教学研究院 骆新华 2016、9、14.
吳福明教授 排球運動發展簡史 編制.
地球在宇宙中 史苏丹.
一條美麗的銀蠹魚 從水經注裡游出來-──亞弦 讓晶瑩剔透的文字,停駐在我們心中-淺談新詩教學
第四章 存货 第一节 存货基础 第二节 原材料 第三节 其他存货 第四节 存货期末计量.
欢迎来到我们的课堂!.
課程名稱:資料結構 授課老師:_____________
第九章 排序 概述 插入排序 交换排序 选择排序 归并排序 基数排序 外排序.
排序 Sorting.
第9章 排序.
第十章 排序與搜尋.
Data Structure(資料結構) 授課老師: 蕭志明 助理教授 Ext:6779
基數排序法.
Sorting 排序 Bubble Sort O(n2) Insert Sort Selection Sort Quick Sort
Data Structure.
如何赢一个机械键盘
Sorting in Linear Time Michael Tsai 2013/5/21.
8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法 8-4 動態規劃技巧 8-5 計算難題
資料結構與C++程式設計進階 排序與搜尋 講師:林業峻 CSIE, NTU 6/ 14, 2010.
綠色能源.
第九章 排序 概述 插入排序 快速排序 交换排序(起泡排序) 选择排序 归并排序.
Course 10 削減與搜尋 Prune and Search
成 本 会 计 学 第六章 产品成本计算的基本方法.
唐常杰 四川大学计算机学院 计算机科学技术系
北一女中 資訊選手培訓營 遞迴、河內塔與merge sort Nan.
107學年度第1期 學生重補修說明會.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
資料結構 老師:李崇明 助教:楊斯竣.
Data Structure.
平面的基本性质 江苏省泰州中学 数学组 姜莹. 平面的基本性质 江苏省泰州中学 数学组 姜莹.
第2章 陣列結構 資料結構設計與C++程式應用
Presentation transcript:

第8章 資料排序 資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第8章 資料排序 資料結構設計與C++程式應用 版權所有 禁止重製

排序的基本觀念 檔案(File) 記錄(Row或Record) 欄位(Column或Field) 鍵值(Key Value)

內部排序法(Internal Sort) 氣泡浮昇排序法(Bubble Sort) 選擇排序法(Selection Sort) 插入排序法(Insertion Sort) 謝耳排序法(Shell Sort) 快速排序法(Quick Sort) 累堆排序法(Heap Sort) 合併排序法(Merge Sort) 基數排序法(Radix Sort)或稱為筒子排序法(Bucket Sort) 樹排序法 (Tree Sort)

內部排序法(Internal Sort) 氣泡浮昇排序法(Bubble Sort) 將N筆記錄(編號0至N-1)按鍵值不遞減次序排序的氣泡浮昇排序法 1.重複步驟2 N-1回合,直到其中有一回合沒有「交換」情形發生 為止。 2.比較陣列中相鄰兩元素之鍵值,若前面元素大於後面元素, 則立刻將兩元素值交換。

內部排序法(Internal Sort) 氣泡浮昇排序法(Bubble Sort) 氣泡浮昇排序法之每一回合結果

內部排序法(Internal Sort) 選擇排序法(Selection Sort) 將N筆記錄(編號1至N)按鍵值不遞減次序排序的選擇排序法為: 1. 重複步驟2 N-1回合。 2.找出第i個至第N個鍵值中的最小者,並將之與第i個鍵值交換。 其中i等於回合數。 選擇排序法的每一回合結果

內部排序法(Internal Sort) 插入排序法(Insertion Sort) 將N筆記錄(編號1至N)依鍵值不遞減之次序排序的插入排序法為: 1. 從第2個鍵值至第N個鍵值,分別執行步驟2。 2.將該鍵值插入到其前面所有鍵值當中第一個大於本身的鍵值之前, 若沒有大於本身者,則保持原狀並繼續下一回合。 插入排序法每一回合排序前,已排序/未排序鍵值分佈

內部排序法(Internal Sort) 插入排序法(Insertion Sort) 插入排序法的每一回合結果

內部排序法(Internal Sort) 謝耳排序法(Shell Sort) 將N筆記錄(編號0至N-1)按鍵值不遞減之順序排列之謝耳排序法為: 1. 選擇一適當S值(S最好為質數)。 2.重複步驟3、4直到S值等於1為止。 3.將陣列A中的N個鍵值均勻地分成S組且同一組內陣列元素之間距均 為 S,分配結果如下: 第一組:(A[0],A[S],A[2S],...,A[ (N-1)/S*S ]) 第二組:(A[1] ,A[S+1],A[2S+1],..., A[ (N-1)/S*S+1 ]) … 第 S組:(A[S-1],A[2S-1],A[3S-1],…,A[N-1]) 然後,每一分組皆用插入排序法排序之。 4.令 S 等於 S 的前一個質數,跳回步驟 2。(註:本步驟只要 S 值 遞減即可,不一定要為質數)

內部排序法(Internal Sort) 謝耳排序法(Shell Sort) 原始記錄鍵值: 第一回合,令 S=3

內部排序法(Internal Sort) 謝耳排序法(Shell Sort) 第二回合,令 S=S-1=2

內部排序法(Internal Sort) 快速排序法(Quick Sort) 分而治之(Divide and Conquer) 觀念:將待排序的N個鍵值(編號0至N-1)分成左右兩半,左半邊之 鍵值小於第一個鍵值(即a[0]),而右半邊則大於或等於第一個 鍵值,如下圖所示 將A[L]與A[J]之鍵值交換

內部排序法(Internal Sort) 快速排序法(Quick Sort) 將N筆記錄(編號0至N-1)按鍵值不遞減之順序排列之快速排序法為: 1. 令K=待排序範圍之第一個(最左邊)鍵值。(第一次為A[0])。 2.由左向右找出一個鍵值Ki,滿足Ki > K。 。 3.由右向左找出一個鍵值Kj,滿足Kj < K。 4.若i < j則將Ki 與Kj交換,然後跳到步驟2。 5.若i ≧ j則將K與Kj交換,並以j為基準分割成左右兩半,然後分別 針對左右兩半進行步驟1至5,直到左半邊鍵值 = 右半邊鍵值為止。

內部排序法(Internal Sort) 快速排序法(Quick Sort)

內部排序法(Internal Sort) 堆積排序法(Heap Sort) 完整二元樹(Complete Binary Tree) 1.是一個二元樹。 2.先有左子樹再有右子樹。 3.從樹根節點到每一個樹葉節點之路徑所經過之節點個數頂多差 1。 堆積樹(Heap Tree) 1.堆積樹除了是一個完整二元樹。 2.每一個節點之鍵值大於或等於其子節點之鍵值。 3.因此樹根節點之鍵值是堆積樹中之最大者。

內部排序法(Internal Sort) 堆積排序法(Heap Sort) 將N筆記錄鍵值K0,K1,K2,…,KN-1,依鍵值由大到小不遞增之順序排列之堆積排序法為: 1.將K0,K1,K2,…,KN-1,轉換成完整二元樹 2.將完整二元樹轉換成堆積樹。 3.輸出樹根鍵值。 4.將樹中最後一個節點搬到樹根。 5.重複步驟2、3、4直到輸出所有鍵值為止。

內部排序法(Internal Sort) 堆積排序法(Heap Sort) 將鍵值 {51,67,5,21,78,35,21+,1} 按鍵值不遞增排序之堆積排序過程如下: 1.將鍵值轉換成完整二元樹。 2.將完整二元樹轉換成堆積樹。

內部排序法(Internal Sort) 堆積排序法(Heap Sort)

內部排序法(Internal Sort) 堆積排序法(Heap Sort) 3.輸出樹根鍵值。 4.將樹中最後一個節點搬到樹根。 5.重複步驟2、3、4直到輸出所有鍵值為止。

內部排序法(Internal Sort) 堆積排序法(Heap Sort)

內部排序法(Internal Sort) 堆積排序法(Heap Sort)

內部排序法(Internal Sort) 堆積排序法(Heap Sort)

內部排序法(Internal Sort) 合併排序法(Merge Sort) : 是一個典型的「分而治之」方法。 1.將N個長度為1的鍵值成對地合併成N/2個長度為2的鍵值組。 2.將N/2個長度為2的鍵值組成對地合併成N/4個長度為4的鍵值組。 3.將鍵值組成對地合併,直到合併成1組長度為N的鍵值組為止。

內部排序法(Internal Sort) 合併排序法(Merge Sort) : 將鍵值 {2,14,8,21,8+,37,89} 按鍵值不遞減順序排序之合併排序法的三個回合如下:

內部排序法(Internal Sort) 基數排序法(Radix Sort) 又稱多鍵排序(Multi-Key Sort)、箱子排序法(Bucket Sort) 最有效鍵優先(Most Significant Digit First:MSD) 1. 從最左邊的位數開始比較。 2. 是採用「分配」、「排序」、「收集」等三個步驟進行。 最無效鍵優先(Least Significant Digit First:LSD) 1.從最右邊的位數開始。 2.只須採用「分配」和「收集」兩個步驟。

內部排序法(Internal Sort) 基數排序法(Radix Sort) 利用MSD法排序{A1,C3,A10,D6,B12,C7,A3,B8,D9,C2,B13,A5,C11等13張牌的過程為: 步驟 1. 準備A、B、C、D四個箱子。 步驟 2. 依次讀入撲克牌,並依花色置入箱中,讀牌依序為A1,C3,…, C11。

內部排序法(Internal Sort) 基數排序法(Radix Sort) 步驟 3. A,B,C,D四個箱子內之牌,個別獨立用插入法排序。 步驟 4. 依A,B,C,D箱子的順序收集。 A1,A3,A5,A10,B8,B12,B13,C2,C3,C7,C11,D6,D9

內部排序法(Internal Sort) 基數排序法(Radix Sort) 利用LSD法排序{A1,C3,A10,D6,B12,C7,A3,B8,D9,C2,B13,A5,C11等13張牌的過程為: 步驟 1. 準備好13個箱子,編號為1,2,…,13。 步驟 2. 讀入撲克牌A1,C3,…,C11,並置入相同點數的箱中。

內部排序法(Internal Sort) 基數排序法(Radix Sort) 步驟 3. 按1、2、…、13箱子的順序收集 A1,C2,C3,A3,A5,D6,C7,B8,D9,A10,C11,B12,B13 請注意!目前已按點數由小到大排序好了。 步驟 4. 準備A,B,C,D四個箱子。

內部排序法(Internal Sort) 基數排序法(Radix Sort) 步驟 5. 依次讀入步驟3之結果A1,C2,C3,…,B13,並置入相同 花色的箱中 步驟 6. 依次從A、B、C、D箱子收集後即完成排序。 Al,A3,A5,A10,B8,B12,B13,C2,C3,C7,C11,D6,D9

內部排序法(Internal Sort) 基數排序法(Radix Sort) 利用LSD方式排列正整數鍵值{231,58,63,871,585,165,66}的過程如下: 步驟 1. 首先按個位數分配到相同的箱子中 收集後得到的順序為:231,871,63,585,165,66,58

內部排序法(Internal Sort) 基數排序法(Radix Sort) 步驟 2.按拾位數分配到正確的箱子中 收集後得到的順序為:231,58,63,165,66,871,585 步驟 3.最後按百位數來分配得到 收集之後即為所得:58,63,66,165,231,585,871

內部排序法(Internal Sort) 樹排序法(Tree Sort) 利用樹排序法將N筆記錄按鍵值不遞減的順序排序的方法如下: 1.首先依據鍵值大小建造成一棵二元搜尋樹(Binary Search Tree), 即樹中的每一節點均滿足a.大於或等於左子樹根,b.小於或等於 右子樹根,因此: (1). 令第一個鍵值為樹根。 (2). 第二個到第N個鍵值依序建到樹中,即從樹根開始比, 若比樹根小則放到左子樹;否則放到右子樹。 2.以中序法追蹤所得即為排序結果。

內部排序法(Internal Sort) 樹排序法(Tree Sort) 以樹排序法將鍵值{33,78,11,48,20,55,33+,99}按不遞減順序排列的過程如下: 1. 建造成一棵二元搜尋樹。

內部排序法(Internal Sort) 樹排序法(Tree Sort) 2.以中序法追蹤得到 11,20,33,33+,48,55,78,99。

外部排序法(External Sort) K 路合併排序法(K Way Merge Sort) 行程(Runs) 2 路合併 Run1

排序法的效益評估