- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章排序-Read.ppt
第十一章 排序 排序(sort)是電腦科技最常用的一種作業,依資料的值排成指定的順序,通常是由小而大的升冪順序(ascending),也可以依資料的值排成由大而小的降冪順序(descending),我們週遭到處都是資料,例如電話簿,電話號碼若不照順序排列,您要找到朋友的電話恐怕很難。 11.1 排序概念 本章將介紹六個內部排序(internal sort)方法:插入(insert)排序法、氣泡(bubble)排序法、選擇(selection)排序法、謝耳(shell)排序法、堆積(heap)排序法、以及快速(quick)排序法,前三種只用於小量的資料,但卻是後三種排序法的基礎,也是一般排序法的基本觀念。 我們將利用內部排序的基本觀念發展成外部排序(external sort)的合併排序法(merge sort)。 所謂內部排序是指在電腦的記憶體裡頭排序的,但當檔案記錄非常龐大,以致電腦的記憶體無法容納時,必須有部份的檔案記錄儲存在媒體上,部份排序後分配至多個檔案,然後從多個檔案合併成一個檔案,重複排序合併的動作,直到全部排序完成為止。 排序分類圖 穩定性是否良好 排序的方法有許多種,要注意穩定性是否良好,例如下列的資料依編號排序,編號同為 222 的有三筆資料,排序後會聚集在一起。 ... ... ... 222 red 222 red 222 red ... 222 green 222 blue 222 green 222 blue 222 green ... ... ... 222 blue ... ... (a)未排序 (b)穩定性佳 (c)穩定性差 第(b)種情形依原來的前後順序排列,穩定性佳。第(c)種情形並不依原來的前後順序排列,穩定性差。在前面標明的六種排序法裡頭只有直接插入法及氣泡法屬於穩定性佳的排序法,其他的排序法穩定性不佳。 排序的效率 排序的效率也是使用時要考慮的因素,效率通常與比較的次數以及資料搬移的多寡及次數都有關係,一般而言,效率與 nlogn 成比例的最佳,n 表資料量,快速排序法就屬於這一種。其他幾種其效率都與 n 的平方成正比。 當排序處理當中,資料來回傳送許多次,從頭到尾處理一遍稱為一回(pass),依演算法的不同其回數也不同。 11.2 選擇排序 在所有排序法當中,選擇排序可說最直覺的了。若提供一系列的資料,我們一定很單純的選擇最小的擺在排序完成系列的第一位,再從剩下的資料再選擇最小的擺在排序完成系列的第二位,如此重複,直到沒有資料為止。我們將介紹兩種選擇排序法:直接選擇排序以及堆積選擇排序。 11.2.1 直接選擇排序 直接選擇排序在任何時刻,資料串列(data list)都被分成兩個次串列(sublist):未排序以及已排序次串列。我們從未排序次串列裡頭選出最小的與第一個資料互換,如此選擇互換一回後,第一個資料就屬於已排序次串列,其餘的資料屬於未排序次串列。再從未排序次串列裡頭選出最小的與第一個資料互換一回,如此選擇互換後,第二個資料就屬於已排序次串列,其餘的資料屬於未排序次串列。選擇互換的動作一直重複,這個無形的分隔線一直往右邊移動,已排序次串列一直擴大,未排序次串列一直縮小,一直到沒有未排序次串列為止。 直接選擇排序舉例 11.2.2 堆積排序法 堆積(heap)是一個二元樹(binary tree)結構,其左右子樹之值均小於其父母(parent)節點之值,一個堆積根節點(root node)是全樹所有節點中最大值的節點。堆積通常以陣列實作,而非以連結串列實作。以陣列實作的優點是容易計算子樹節點的位置,也容易計算父母節點的位置,增加處理的效率。 一
文档评论(0)