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

歡迎光臨散文網(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)化的評論 (共 條)

分享到微博請遵守國家法律
太康县| 新宾| 延川县| 洱源县| 新竹市| 长汀县| 济南市| 峡江县| 长宁区| 常熟市| 镇江市| 奈曼旗| 耿马| 丽江市| 马尔康县| 防城港市| 奉新县| 克东县| 台东县| 曲水县| 涪陵区| 和硕县| 仪陇县| 怀远县| 峨山| 宜昌市| 邯郸市| 从化市| 手游| 云浮市| 大名县| 惠安县| 墨脱县| 文成县| 日喀则市| 桑日县| 保山市| 北安市| 柞水县| 康平县| 瑞金市|