置換——選擇排序
土辦法構造初始歸並段
同時最多放兩個到輸入緩沖區,只能讀入兩塊的內容,然后把這些記錄在內存排序之后,在輸出寫回外存,這樣就得到了一個初始歸並段。
由於內部排序的內存工作區只能容納6個記錄(例子)。
可以用一片更大的內存區域來進行內部排序(如:可容納18個記錄)
用於內部排序的內存工作區WA可容納l個記錄,這就意味着構造的初始歸並段也只能包含l個記錄,若文件共有n個記錄的話,則初始歸並段數量r=n/l
置換—選擇排序
注:假設用於內部排序的內存工作區只能容納3個記錄
剛開始會在待排序的文件當中讀入3個記錄
我們要構造遞增的歸並段
檢查內存工作區中的記錄,把關鍵字最小的記錄”置換“出去,並且用一個變量MINIMAX把剛才輸出的關鍵字的值給記下來
現在內存工作區中有一個空位,會在FI讀入下一個記錄
再把最小的置換出去,並且用MINIMAX記錄。
讀着讀着,
此時,內存工作區當中最小的一個記錄是10,但是通過MINIMAX這個變量我們知道,之前輸出到歸並段1的記錄到13了,所以10這個記錄我們不能放到歸並段1的末尾。
除了10 就是到14比13大,所以我們可以把14放到歸並段1的末尾
緊接着讀入下一個。。
讀到2的時候最小的比MINIMAX小,所以不能放到歸並段1的末尾
所以把30放出到歸並段1的末尾。
在一直放。。
如果在某一個時刻WA內的關鍵字都比MINIMAX更小,則該歸並段在此截至。
接下來構造歸並段2
。。。
接下來構造歸並段3
。。。
這些初始歸並段的長度可以超越內存工作區的大小的限制
讀寫磁盤是以磁盤塊為單位的。