日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

排序算法之----快速排序(快速上手快速排序)

發(fā)布時間:2025/3/12 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法之----快速排序(快速上手快速排序) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

排序算法之----快速排序(快速上手快速排序)

何為快速排序算法?

快速排序的基本思想又是什么?

其實很簡單:

快速排序的基本思想是

1、先從數(shù)列中取出一個數(shù)作為基準(zhǔn)數(shù)(這里我們的算法里面取數(shù)組最右邊的元素作為基準(zhǔn)數(shù),節(jié)省了一個變量 0。0)

2、分區(qū)過程,將比這個數(shù)大的數(shù)全放到它的右邊,小于或等于它的數(shù)全放到它的左邊

3、再對左右區(qū)間重復(fù)第二步,直到各區(qū)間只有一個數(shù)(這里涉及到一個遞歸的過程)

題外話說一句(快速排序有兩種:一種是標(biāo)準(zhǔn)快速排序;一種是隨機快速排序,后面會講到0.0)


首先,在實現(xiàn)對數(shù)組排序之前,我們先來實現(xiàn)一個小目標(biāo),將小于等于數(shù)組最右邊的元素放在左邊;大于數(shù)組最右邊的元素放在右邊。(透露一個小秘密,不知道你有沒有發(fā)現(xiàn),如果這樣不斷循環(huán)遞歸下去的話,當(dāng)左右兩邊都只剩一個元素的時候,數(shù)組已經(jīng)排好序了0。0)

行,那現(xiàn)在讓我們來實現(xiàn)我們的小目標(biāo):

就是所謂的patition過程:

定義兩個指針L和R,定義兩個區(qū)域Less和More,

具體過程如下圖所示:


(不好意思,時間問題,寫的有點簡陋,有疑問的可以直接在下面留言哦0。0)

下面附上程序源碼:

// 理解了快速排序的具體原理或者說具體操作,實現(xiàn)起來不是很難,定義兩個緩存變量,

// 兩個指針通過傳參得到。要對過程很清晰,>arr[R]怎么樣,<arr[R]怎么樣,等于又怎么樣


? 最后記得將大于區(qū)域最后一個數(shù)與大于區(qū)域最左邊的數(shù)進行交換,即arr[R]與arr[more]


有了這個patition過程,快排的基本功能已經(jīng)實現(xiàn)了

下面是整體的排序:

其中,24行這樣做其實就省去了在測試時提供要排序的下標(biāo)的步驟,直接全排(因為我們這個函數(shù)實現(xiàn)的是給定任何兩個下標(biāo), 就可以對下標(biāo)范圍之間的元素進行排序了)

30行這里就體現(xiàn)了隨機快速排序和標(biāo)準(zhǔn)快速排序的區(qū)別了,這里在L和R之間隨機選擇一個數(shù)與最后一個數(shù)位置交換,包含概率因素,使其平均時間復(fù)雜度就變小了,34和35行就是遞歸過程了。


另外用eclipse提供的方法來比較自己的算法是否正確:


總結(jié)

以上是生活随笔為你收集整理的排序算法之----快速排序(快速上手快速排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。