排序算法之----快速排序(快速上手快速排序)
排序算法之----快速排序(快速上手快速排序)
何為快速排序算法?
快速排序的基本思想又是什么?
其實很簡單:
快速排序的基本思想是
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提供的方法來比較自己的算法是否正確:
總結
以上是生活随笔為你收集整理的排序算法之----快速排序(快速上手快速排序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库的哪些事儿~~
- 下一篇: 蓝桥杯之--神秘三位数