int quicksort(int
array, int
left, int
right)
}if(left
< j)
quicksort(array, left, j);
if(i < right)
quicksort(array, i, right);
return 0;
}
注意快速排序是通過遞迴完成的,也就不難理解其運用的思想主要是分治法
同樣的,由於使用遞迴,也就必然要花費一定的空間複雜度,這裡棧深最壞情況下為o(n),平均o(logn)
注意快速排序中迴圈的條件,一定要定準邊界防止死迴圈
比如
if(i <= j)
這裡必須是i <= j,這是因為如若左右哨兵執行到i = j時,如果i,j不-1,則退出迴圈時,可能此時i,j的值與進入迴圈時是一樣的,那麼在遞迴的時候可能就會出現死迴圈
快速排序最壞情況下和bubble sort的時間複雜度是一樣的:o(n²)
最好情況是o(nlogn)
關於排序(快速排序)
package com.sw.demo.test 關於快速排序 author song public class testquicksort quicksort arr,0,arr.length 1 快速排序 for int i 0 i arr.length i 快速排序 param arr par...
關於快速排序的總結
快速排序其實是氣泡排序的公升級版,都具有交換排序的思想。快速排序通過一遍排序,將資料分為兩部分,一部分資料都比另外一部分資料小,然後再分別對這兩部分資料再進行此排序,直到排序結束。因此,此排序方法用到了遞迴。下面來舉個例子 對69 65 90 37 92 6 28 54 八個數進行排序 69 65 ...
關於快速排序,歸併排序,堆排序
1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。1 如果不多於1個資料,直接返回。2 一般選擇序列最左邊的值作為支點資料。3 將序列分成2部分,一部分都大於支點資料,另外一部分都小於支點資料。4...