十大排序演算法之快速排序

2021-10-02 16:46:38 字數 1518 閱讀 3370

簡單排序:插入排序、選擇排序、氣泡排序(必學)

分治排序:快速排序、歸併排序(必學)

分配排序:桶排序、基數排序

樹狀排序:堆排序(必學)

其他:計數排序(必學)、希爾排序

原理:核心思想是通過乙個支點進行資料拆分,左邊的資料小於這個支點,右邊的資料大於支點,然後把左邊和右邊的做一次遞迴,直到遞迴結束。

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...