日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序之外部排序

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序之外部排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有時,待排序的文件很大,計算機內存不能容納整個文件,這時候對文件就不能使用內部排序了(這里做一下說明,其實所有的排序都是在內存中做的,這里說的內部排序是指待排序的內容在內存中就可以完成,而外部排序是指待排序的內容不能在內存中一下子完成,它需要做內外存的內容交換),外部排序常采用的排序方法也是歸并排序,這種歸并方法由兩個不同的階段組成:

1、采用適當的內部排序方法對輸入文件的每個片段進行排序,將排好序的片段(成為歸并段)寫到外部存儲器中(通常由一個可用的磁盤作為臨時緩沖區),這樣臨時緩沖區中的每個歸并段的內容是有序的。

2、利用歸并算法,歸并第一階段生成的歸并段,直到只剩下一個歸并段為止。

例如要對外存中4500個記錄進行歸并,而內存大小只能容納750個記錄,在第一階段,我們可以每次讀取750個記錄進行排序,這樣可以分六次讀取,進行排序,可以得到六個有序的歸并段,如下圖:

每個歸并段的大小是750個記錄,記住,這些歸并段已經全部寫到臨時緩沖區(由一個可用的磁盤充當)內了,這是第一步的排序結果。

完成第二步該怎么做呢?這時候歸并算法就有用處了,算法描述如下:

1、將內存空間劃分為三份,每份大小250個記錄,其中兩個用作輸入緩沖區,另外一個用作輸出緩沖區。首先對Segment_1和Segment_2進行歸并,先從每個歸并段中讀取250個記錄到輸入緩沖區,對其歸并,歸并結果放到輸出緩沖區,當輸出緩沖區滿后,將其寫道臨時緩沖區內,如果某個輸入緩沖區空了,則從相應的歸并段中再讀取250個記錄進行繼續歸并,反復以上步驟,直至Segment_1和Segment_2全都排好序,形成一個大小為1500的記錄,然后對Segment_3和Segment_4、Segment_5和Segment_6進行同樣的操作。

2、對歸并好的大小為1500的記錄進行如同步驟1一樣的操作,進行繼續排序,直至最后形成大小為4500的歸并段,至此,排序結束。

可以用一個圖示表示上述算法的歸并效果:

以上對外部排序如何使用歸并算法進行排序進行了簡要總結,提高外部排序需要考慮以下問題:

1、如何減少排序所需的歸并趟數。

2、如果高效利用程序緩沖區,使得輸入、輸出和CPU運行盡可能地重疊。

3、如何生成初始歸并段(Segment)和如何對歸并段進行歸并。

?

轉載于:https://www.cnblogs.com/codeMedita/p/7425291.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的排序之外部排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。