public
static
void
quick_sort
(int
arr ,
int l,
int r)
}quick_sort
(arr,l,j)
;quick_sort
(arr,j+
1,r)
;}
快排的思路首先一組資料 找乙個基準數(這裡選用陣列的第一位做基準資料)
之後i從前往後掃,找到乙個大於(或等於)基準資料的數
j從後往前掃,找到乙個乙個小於(或等於)基準資料的數
之後將這兩個數字置交換
這樣比基準數小的(或者相等的)就跑到了基準數的左邊
比基準數大的(或者相等的)就跑到了基準數的右邊
然後 陣列分成了兩部分 前一部分,和後一部分,
然後再一次排左右,最終 整個陣列排序完成
時間複雜度,平均 o(n
logn
)o(nlogn)
o(nlog
n)最差o(n
2)
o(n^2)
o(n2)空間
o (l
ogn)
o(log_n)
o(logn
)
是不是感覺相等的有點彆扭因為我在學習的過程中也發現了這個問題
比如遇到 222222222 這種陣列 快排就退化嚴重 當然 後面有其他排序方式
演算法 排序演算法整理 快速排序
快速排序是在氣泡排序的基礎上改進而來的,氣泡排序每次只能交換相鄰的兩個元素,而快速排序是跳躍式的交換,交換的距離很大,因此總的比較和交換次數少了很多,速度也快了不少。快速排序的演算法思想稍微有點複雜,但是還是比較容易理解的。快速排序的思想就是挖坑填坑 分治法 比如下面這個陣列,我們首先選擇乙個基準數...
排序演算法整理小結(快速排序)
說到快速排序演算法,可能我們會了解到其最壞的執行時間為o n n 但是對於其平均效能為o nlgn 正是這一點使得其被廣泛的使用,另乙個重要的特點就是,其能夠進行原地排序,能夠盡可能的減少空間的占用,盡可能的減小演算法使用的空間。說了這麼多理由,那麼到底是怎麼一回事,或者到底是怎麼樣的呢?其核心部分...
排序 排序演算法整理
經常零零散散的用到排序演算法,將幾類常見的總結下來 時間複雜度o n 2 空間複雜度o 1 穩定排序 param arr public static void insersort int arr else arr j 1 tmp 氣泡排序 時間複雜度 o n 2 空間複雜度o 1 穩定排序 para...