快速排序是氣泡排序的一種改進,
//在 pivot 的右邊一直找,找到小於等於 pivot 值,才退出
while
(num[b]
> pivot)
//如果 l >= r 說明 pivot 的左右兩的值, 已經按照左邊全部是
//小於等於 pivot 值, 右邊全部是大於等於 pivot 值
if(a >= b)
//交換
temp = num[a]
; num[a]
= num[b]
; num[b]
= temp;
如果交換完後, 發現這個 arr[l] == pivot 值 相等 b--, 前移
if(num[a]
== pivot)
//如果交換完後, 發現這個 arr[r] == pivot 值 相等 a++, 後移
if(num[b]
== pivot)
////如果 l == r, 必須 l++, r--, 否則為出現棧溢位
if(a == b)
//向左遞迴
if(left < a)
//向右遞迴
if(right > b)
}return num;
}}平均時間複雜度o(nlogn)
最好情況 o(nlog n)
最壞情況 o(n2)
空間複雜度 o(nlog n)
排序方式 ln-place
穩定性 不穩定
寫法二
/**
* 快速排序方法
* @param array
* @param start
* @param end
* @return
*/public
static
int[
]quicksort
(int
array,
int start,
int end)
/** * 快速排序演算法——partition
* @param array
* @param start
* @param end
* @return
*/public
static
intpartition
(int
array,
int start,
int end)
return smallindex;
}/**
* 交換陣列內兩個元素
* @param array
* @param i
* @param j
*/public
static
void
swap
(int
array,
int i,
int j)
十大排序演算法 快速排序
原理 從數列中挑出乙個元素,稱為 基準 pivot 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分割槽退出之後,該基準就處於數列的中間位置。這個稱為分割槽 partition 操作 遞迴地 recursive 把小於基準值元素的子...
十大排序演算法之快速排序
簡單排序 插入排序 選擇排序 氣泡排序 必學 分治排序 快速排序 歸併排序 必學 分配排序 桶排序 基數排序 樹狀排序 堆排序 必學 其他 計數排序 必學 希爾排序 原理 核心思想是通過乙個支點進行資料拆分,左邊的資料小於這個支點,右邊的資料大於支點,然後把左邊和右邊的做一次遞迴,直到遞迴結束。ph...
十大排序 堆排序
堆排序屬於選擇排序 選擇排序的基本思想 每一趟 第i趟 在後面n i 1個待排序的元素中選取關鍵字最小的元素,作為有序子串行的第i個元素,直到第 n 1趟做完,待排序元素只剩下1個,就不用再選了。堆排序適合關鍵字較多的情況 n 1000 比如 在1億個數中選出前100個最大值?首先使用乙個大小為10...