簡單排序:插入排序、選擇排序、氣泡排序(必學)
分治排序:快速排序、歸併排序(必學)
分配排序:桶排序、基數排序
樹狀排序:堆排序(必學)
其他:計數排序(必學)、希爾排序
原理:核心思想是通過乙個支點進行資料拆分,左邊的資料小於這個支點,右邊的資料大於支點,然後把左邊和右邊的做一次遞迴,直到遞迴結束。
phpcode實現
$data
=array(2
,1,3
,9,4
,6,5
,8,7
);$datanum
=count
($data);
$leftindex=0
;$rightindex
=$datanum-1
;quicksort
($data
,$leftindex
,$rightindex);
print_r
($data);
function
quicksort(&
$data
,$leftindex
,$rightindex
)while
($data[$j
]>
$pivot)if
($i<=$j)
$i++;$j
--;}}
if($leftindex
<$j)
if($i<
$rightindex
)return
$data
;}
gocode實現
package main
import
"fmt"
func
main()
datanum :=
len(data)
leftindex :=
0 rightindex := datanum -
1quicksort
(&data, leftindex, rightindex)
fmt.
println
(data)
}func
quicksort
(data *[9
]int
, leftindex, rightindex int
)for data[j]
> pivot
if i <= j
i++j--}}
if i < rightindex
if leftindex < j
}
穩定性:不穩定排序
空間複雜度
最優的情況下空間複雜度為:o(logn) ;每一次都平分陣列的情況
最差的情況下空間複雜度為:o( n ) ;退化為氣泡排序的情況原地排序
時間複雜度:
平均情況:o(n log n)
最壞情況:o(n² )
最好情況:o(n log n)
十大排序演算法 快速排序
原理 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽 partition 操作 遞迴地 recursive 把小於基準值元素的子...
十大排序演算法之快速排序(QuickSort)
一 前言 資料結構與演算法,順便刷leetcode,無意間發現了乙個 我覺得講解的比較好的網頁,並且會拿leetcode裡面的題目當做例題,如有需要,奉上 五分鐘學演算法 二 演算法的介紹 選取兩個哨兵i,j哨兵i指向序列的最前端,哨兵j指向序列的最後端,選取乙個基準點。判斷哨兵i指向的元素是否大於...
十大排序演算法之 快速排序 六)
選取基準點,左右指標分別從左右進行選取進行交換,使左邊資料小於等於基準點,右邊資料大於基準點,返回基準點,進行遞迴。private static void quicksort int arr,int left,int right 分割槽 int mid partition arr,left,righ...