快速排序是在實踐中執行比較快速的一種排序演算法。它的平均時間效能為o(nlogn),但它的最壞的時間效能也是o(
如果陣列是0或者1個元素的時候直接返回
在陣列中任意選取乙個元素v作為樞紐
將剩餘的元素分為兩個集合小於等於的和大於等於的。
然後返回小於等於的後接上v在接上返回大的大於的。
在這裡有兩個問題需要注意:
樞紐的選擇問題,如果選取第乙個元素的話,那麼如果預先輸入的陣列是將近有序的,那麼第乙個元素很可能就是相對較小的元素,那麼整個排序將會出現一邊傾斜的現象,將會是o(
如果遇到了相等的元素,i和j的位置該不該停下來。設想一些如果全是是相等的元素,如果i和j都停下來,那麼將會產生大量相同元素的交換,但是這個時候會產生兩個平衡的陣列,按照歸併的思想,此時的時間複雜度是o(nlogn)。如果停止了,那麼center的位置就變成了right-1或者right,也就是會產生兩個極其不平衡的陣列,這樣的時間複雜度將會是o(
如果陣列的長度小於20的時候,插入排序演算法會比快速排序的演算法快。經統計,這樣會帶來15%的提速。
**:
public class quicksort
quicksort(nums,0,nums.length -1,10); }
private void quicksort(int nums,int left,int right,int offset)
//右邊要找到比樞紐值小的位置就停止
while(nums[--j]>=pivot) {}
//只有i>=j的時候才進行交換
if(ileft&&tempnums[center])
//這個過後,center位置的元素小於right位置的
if(nums[center]>nums[right])
//這個過後,left位置小於center位置
if(nums[left] > nums[center])
//交換center和right-1位置的元素
swap(nums,center,right-1);
//返回樞紐的值
return nums[right-1]; }
//交換兩個元素的值
private void swap(int nums,int a,int b)
public static void main(string args) ;
sort.sort(nums);
for(int i = 0;i
}}
java 快速排序
public class myquicksort while strvoid middle strvoid low lowif low hight else if hight middle temp strvoid hight strvoid hight strvoid low strvoid lo...
快速排序(java)
快速排序 public class quacksort int pivot arr low 取第乙個數作為中間數 左滑塊當前的下標數,從第二個數字開始,從最後乙個開始 int left low 1 int right high 右滑塊當前的下標數 while left right 從右邊開始找 wh...
快速排序(Java)
快速排序的思想是基於分治法加上遞迴思想,排序陣列時,將陣列分成兩個小部分,然後對它們遞迴排序,直到它們都不可再分為止。快速排序的平均執行時間是o nlog n 遠比插入排序的o n 2 時間小。快速排序 param arr param start param end return private s...