最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

算法:快速排序的神奇優(yōu)化

2022-12-22 12:05 作者:A4的釘子  | 我要投稿

我在研究三路快速排序時(shí),想出來了一個(gè)點(diǎn)子,使得非三路快速排序也可以高效排序大量重復(fù)元素的數(shù)據(jù)。

原理是這樣的:

單次排序開始前,先設(shè)定一個(gè)狀態(tài)為真

遇到等于基準(zhǔn)值的值時(shí),如果狀態(tài)為真則與小于基準(zhǔn)值時(shí)做相同的操作,

且無論狀態(tài)為何值都對其進(jìn)行取反并賦回原值。

這樣可以保證遇到了重復(fù)的數(shù)據(jù)時(shí),重復(fù)數(shù)據(jù)被均勻的分到了基準(zhǔn)值兩側(cè),從而避免了大量重復(fù)數(shù)據(jù)帶來的嚴(yán)重劃分不均勻,并提高了速度,減少了遞歸深度。

我將其稱作交替快排。

以下為 交替快排、三路快排、普通快排 的不同數(shù)據(jù)情況的速度對比:

運(yùn)行耗時(shí)對比

可以看出,三路快排在處理大量重復(fù)數(shù)據(jù)情況之外的速度有所下降,而交替快排則基本與普通快排相同。

交替快排對完全隨機(jī)元素進(jìn)行排序時(shí)雖然比普通快排慢一些但是也比三路快排更快。

以下貼出代碼:

以下是用來生成隨機(jī)數(shù)組的代碼:

所以,似乎交替快排比三路快排更加實(shí)用呢!

如果有人有證據(jù)證明這種優(yōu)化方法已經(jīng)被發(fā)明過并發(fā)表了,請聯(lián)系我。

反正我是沒搜到這種優(yōu)化方法。三數(shù)取中我沒用因?yàn)槊菜莆覝y的更慢。多線程優(yōu)化沒加。

插排閾值我設(shè)置的10。尾遞歸優(yōu)化加了,取l與r中間的數(shù)做基準(zhǔn)值優(yōu)化加了,很好用。

有序檢查優(yōu)化沒加,在我常用的場景不太劃算。

不過在已經(jīng)排好的重復(fù)元素多的數(shù)組中,再進(jìn)行排序。

交替快排應(yīng)該會比三路快排有著更多的交換次數(shù),這倒是可以用交換前先檢查值是否相等來解決,不過這樣會略慢一些,所以根據(jù)需求看你需要減少交換還是提高其它情況下的速度。雖然除了大量重復(fù)依舊比三路快排快。

算法:快速排序的神奇優(yōu)化的評論 (共 條)

分享到微博請遵守國家法律
喀喇沁旗| 桂阳县| 徐州市| 定兴县| 久治县| 陇南市| 比如县| 嘉禾县| 凤台县| 廊坊市| 昭通市| 长寿区| 三明市| 柳河县| 安顺市| 灵璧县| 科技| 周口市| 徐水县| 海伦市| 同德县| 扶沟县| 天镇县| 长治县| 虎林市| 阿鲁科尔沁旗| 秦安县| 京山县| 临澧县| 铜鼓县| 嵊泗县| 平顶山市| 濮阳市| 瓦房店市| 南雄市| 巢湖市| 莱西市| 荣昌县| 秦安县| 阳西县| 黎平县|