/**
* 快速排序:在資料序列中選擇乙個元素作為基準值,每趟從資料序列的兩端開始交替進行,將小於基準值的元素交換到序列前端,將大於基準值的元素交換到序列後端,
* 介於兩者之間的位置則成為基準值的最終位置。同時,序列被劃分為兩個子串行,再分別對兩個子串行進行快速排序,知道子串行長度為1,則完成排序。
* 最好情況,每趟排序將序列分成長度相近的兩個子串行,時間複雜度為o(n*log(2)n)
* 最壞情況,每趟將序列分成長度差異很大的兩個子串行,時間複雜度為o(n^2)
* 快速排序是不穩定的
* 當n較大且資料序列隨機排列時,快速排序是「快速」的,當n很小或基準值選取不合適時,快速排序較慢。
* @author
* */
public class quicksort
public static void quicksort(int keys,int begin,int end){
if(begin>=0&&begin=0&&end=vot) j--;//從後向前找較小值,不移動與基準值相等的元素
if(i
快速排序 QuickSort
快速排序通常用於排序的最佳的使用選擇,其期望執行時間為 o nlgn 能夠進行就地排序。最壞執行時間為 o n 2 演算法描述 分解 divide 陣列 a beg end 被劃分為兩個子陣列 a beg mid 1 和a mid 1 end 使得a beg mid 1 中的資料都小於 a mid ...
快速排序 quicksort
快速排序 quicksort 是分治法的典型例子,它的主要思想是將乙個待排序的陣列以陣列的某乙個元素x為軸,使這個軸的左側元素都比x大,而右側元素都比x小 從大到小排序 然後以這個x在變換後陣列的位置i分為左右兩個子陣列,再分別進行快速排序,直到子陣列中只有乙個元素為止。快速排序演算法如下 void...
快速排序 QuickSort
1,void quicksort int a,int low,int high 這個函式是排序的遞迴部分,mid就是已經確定的基準元素的位置。2,int partition int a,int low,int high 這個函式幹了兩件事 1 挑出來乙個基準元素 這裡選的是最後乙個作為基準 找它的正...