資料結構6 2內部排序

2021-09-09 08:55:08 字數 2011 閱讀 9338

假設含n個記錄的序列為

其對應的關鍵字序列為

這些關鍵字的排列方式有多種,其中至少有一種排列方式能使得關鍵字之間存在著這樣乙個關係:

kp1 <= kp2 <= … <= kpn

按此關係將記錄序列重新排列為

即為有序記錄,將這一過程稱為排序

若在乙個記錄序列中ki == kj,且在排序前的序列中ri領先於rj。若在排序後的序列中ri仍領先於rj,則稱使用的排序方法是穩定的;若排序後的序列中可能使rj領先於ri,則稱所用的排序方法是不穩定的。

若整個排序過程不需要訪問外存便能完成,則稱此類排序為內部排序;反之,待排序的記錄數量很大,整個排序過程不能在記憶體中一次完成,需要借助外存才能實現,則稱此類排序為外部排序

內部排序方法

1.插入排序:將無序序列區中的記錄向有序序列區中插入,使有序序列長度增加

2.交換排序:通過比較記錄的關鍵字大小來決定是否交換記錄,從而排定記錄所在位置

3.歸併排序:將兩個小的有序記錄序列合併成乙個大的有序記錄序列,逐步增加有序序列長度

4.選擇排序:從無序序列區中選出關鍵字最小(公升序排列)或最大(降序排列)的記錄,並將它交換到有序序列區中指定位置的方法

5.計數排序:通過統計小於(公升序排列)或大於(降序排列)待排序記錄關鍵字的記錄個數,從而決定待排序記錄所在位置

基本操作是將乙個記錄插入到已排好的有序表中,從而得到乙個新的、記錄數增加1的有序表。

在直接插入排序的基礎上,用折半查詢定位記錄待排序記錄在已排序記錄表中的位置。

是對折半插入排序演算法的一種改進,目的是減少排序過程中記錄的移動次數。以第乙個記錄為界,將整個記錄序列分成兩部分進行處理。將不小於第乙個記錄的記錄用折半插入的方法插入到左路的有序序列中;將小於第乙個記錄的記錄用折半插入的方法插入到右路的有序序列中。可設兩個指標final和first分別指示左路序列的最後一條記錄位置和右路序列中第一條記錄的位置。

改變查詢過程中採用的儲存結構。採用靜態鍊錶進行排序,並在排序完成之後一次性的調整各個記錄相互之間的位置。

又稱縮小增量排序。利用直接插入排序的優點對待排序的記錄序列先做巨集觀調整,再做微觀調整。將整個記錄序列按下標的一定增量分成若干個子串行,對每個子串行分別進行直接插入排序。然後再將增量縮小,劃分子串行,重複進行,最後再對整個序列進行一次直接插入排序。

略又稱霍爾排序,將序列中的每條記錄當成乙個標尺,凡是比該記錄關鍵字小的記錄移到該記錄的前面,不小於的移到後面,這樣就確定了該記錄的位置,也稱該記錄為樞軸記錄

一趟簡單選擇排序的操作為:從無序的記錄序列中選出乙個關鍵字值最小的記錄存入到指定的位置

一種借助於錦標賽方式的選擇排序演算法。使用近似於完全二叉樹的樹形,所有記錄均為葉子結點,從葉子結點開始,通過兩兩比較,填到樹頂的結點是對應關鍵字最小的記錄,然後將該葉子結點關鍵字置為最大關鍵字(或無窮大),繼續選出第二個最小值,重複進行至排序結束。

堆或者是空二叉樹,或者是一顆滿足如下特性的完全二叉樹:其左右子樹均是堆,並且當左子樹或右子樹不空時,根結點的值小於(或大於)左右子樹根結點的值。

1. 有序表合併演算法

2.2路歸併排序演算法1.有序表合併演算法

2.歸併排序演算法

通過記錄關鍵字的比較,計算每個記錄應該存放的位序,也就是對每個記錄,統計記錄序列中按關鍵字值排在它前面的記錄個數,然後把每個記錄調到相應位置。

一種多關鍵字的排序方法。假設有n個記錄構成的序列,其中每個記錄ri中含有d個關鍵字(k01 , k11 … kd-1 1)若對於序列中任意兩個記錄ri和rj都滿足ri中所有關鍵字對應小於rj中的關鍵字。則稱上述記錄序列對關鍵字(k01 , k11 … kd-1 1)有序。其中k0被稱為最主位關鍵字,kd-1被稱為最次位關鍵字。

先按最主位關鍵字k0進行排序,並按k0的不同值將記錄序列分成若干子串行,在分別按k1進行排序…以此類推,直到最後按最次位關鍵字kd-1排序完成為止

先按最次位關鍵字kd-1進行排序,並按k0的不同值將記錄序列分成若干子串行,在分別按kd-2進行排序…以此類推,直到最後按最主位關鍵字k0排序完成為止

資料結構 內部排序

內部排序演算法 時間複雜度 o n 2 o n 2 o n 2 空間複雜度 o 1 o 1 o 1 演算法名稱 插入 選擇 冒泡 演算法名稱 希爾 堆 快速 歸併 基數 空間複雜度 o 1 o 1 o logn o n o 2rd 時間複雜度 o nlogn o nlogn o nlogn o nl...

資料結構 內部排序法

總結一些演算法的實現 交換排序 1.冒泡演算法 typedef struct arr1 arr1 void bubblesort arr1 goal,int n if flag m沒有交換時證明排玩了,跳出迴圈結束排序。return 2.快速排序 時間複雜度為o nlog2n 空間複雜度為o log...

資料結構 內部排序之氣泡排序

1.基本思想 每次比較兩個相鄰的元素,如果他們的順序錯誤就把他們交換過來 2.具體做法 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越...