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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

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

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

何為快速排序算法?

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

其實很簡單:

快速排序的基本思想是

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

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

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

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


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

行,那現在讓我們來實現我們的小目標:

就是所謂的patition過程:

定義兩個指針L和R,定義兩個區域Less和More,

具體過程如下圖所示:


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

下面附上程序源碼:

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

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


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


有了這個patition過程,快排的基本功能已經實現了

下面是整體的排序:

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

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


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


總結

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

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