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

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

C/C++編程筆記:快速排序的思路與優(yōu)化改進(jìn)(C 語言描述)

2020-08-19 21:30 作者:C語言編程__Plus  | 我要投稿

本文中的代碼適用于對(duì)數(shù)組元素進(jìn)行排序(以整型數(shù)據(jù)為例)。

自定義的方法

在排序方法之前,定義了三個(gè)不同的方法,以便于對(duì)數(shù)組元素進(jìn)行比較和交換。為了適用于不同的數(shù)據(jù)類型,這里使用到了 void 指針以及指針類型的轉(zhuǎn)換,也就是 C 語言中范型的概念。如果需要對(duì)不同元素類型的數(shù)組進(jìn)行排序,只修改 LessArr() 方法和 Less() 方法即可。


未改進(jìn)的快速排序

基本快速排序

基本快速排序的切分方法中,針對(duì)于切分的標(biāo)志元素(這里是數(shù)組的首元素),通過自身與數(shù)組中其他元素不斷交換位置來達(dá)到切分目的。


后交換快速排序

后交換快速排序同樣是使用了很多次交換方法,不過對(duì)于基本快速排序來說,交換次數(shù)明顯減少。因?yàn)榍蟹值臉?biāo)志元素總是在大循環(huán)結(jié)束之后進(jìn)行的,也就是說在前面的交換里,沒有將自身加進(jìn)來,這樣就達(dá)成了使用更少的交換次數(shù)得到同樣效果的目的。


非交換快速排序

非交換快速排序中并沒有使用到前面的交換方法,它是通過事先保存切分標(biāo)志元素的內(nèi)容,重復(fù)進(jìn)行前后賦值來實(shí)現(xiàn)的。


幾種改進(jìn)的策略

亂序處理

為了確保數(shù)組中數(shù)據(jù)的隨機(jī)性,我們可以對(duì)數(shù)組進(jìn)行亂序處理?;蛘唠S機(jī)在數(shù)組中選取一個(gè)元素作為樞軸(pivot)來對(duì)數(shù)組進(jìn)行劃分。

三取樣切分快速排序

三取樣切分也就是三位取中的方法,一般是將數(shù)組的首、尾以及中間元素的中位數(shù)作為切分元素。為了達(dá)到更好的切分效果,也可以選擇隨機(jī)在數(shù)組中尋找三個(gè)元素,用它們的中位數(shù)元素作為樞軸(pivot)進(jìn)行數(shù)組元素的切分。這里我選擇了將首、尾以及中三個(gè)元素進(jìn)行比較,將中位元素置于首位,再調(diào)用之前完成的未改進(jìn)方法。


三向切分快速排序(熵最優(yōu)的排序)

在實(shí)際應(yīng)用中可能會(huì)出現(xiàn)數(shù)據(jù)重復(fù)次數(shù)很多的情況,這就具有很大的改進(jìn)潛力,我們可以將當(dāng)前實(shí)現(xiàn)的線性對(duì)數(shù)級(jí)的性能提高到線性級(jí)別。一個(gè)簡(jiǎn)單的思路就是將數(shù)組切分為三個(gè)部分。


排序方法的調(diào)用


完整代碼


本次文章的分享就到這里了,希望對(duì)大家有幫助!

自學(xué)C/C++編程難度很大,不妨和一些志同道合的小伙伴一起學(xué)習(xí)成長(zhǎng)!

學(xué)習(xí)C/C++編程知識(shí),提升C/C++編程能力,歡迎關(guān)注UP一起來成長(zhǎng)!
另外,UP在主頁上傳了一些學(xué)習(xí)C/C++編程的視頻教程,有興趣或者正在學(xué)習(xí)的小伙伴一定要去看一看哦!會(huì)對(duì)你有幫助的~

C/C++編程筆記:快速排序的思路與優(yōu)化改進(jìn)(C 語言描述)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
南投县| 贺州市| 宁蒗| 宁阳县| 申扎县| 桦川县| 溆浦县| 吉林省| 阿瓦提县| 温宿县| 星座| 眉山市| 普定县| 定结县| 工布江达县| 瓦房店市| 蕉岭县| 毕节市| 雷波县| 象州县| 高州市| 阳西县| 恩平市| 进贤县| 潜山县| 池州市| 英超| 温宿县| 南投市| 乌恰县| 绿春县| 炎陵县| 临泉县| 新晃| 夹江县| 泗阳县| 永宁县| 新津县| 鄂伦春自治旗| 延庆县| 北碚区|