一、演算法描述
快速排序是對氣泡排序的一種改進。在氣泡排序中,記錄每次都是與相鄰位置上的資料作比較,因此每次只能移動乙個位置。而在快速排序中,記錄的比較和移動都是從兩端向中間進行的。
其主要思想:首先在待排序陣列中選取乙個基準值(作為比較物件),然後利用基準值將待排陣列分成2個部分。基準值左邊的陣列的資料都小於或等於基準值;基準值右邊的陣列的資料都大於或等於基準值,然後分別對這兩部分重複上述過程,直到整個陣列變成有序陣列。
顯然,快速排序是乙個遞迴的過程。
二、演算法分析
快速排序的趟數取決於遞迴的深度。
最好的情況:每次劃分對乙個記錄定位後,該記錄的左側子串行與右側子串行長度相等。
時間複雜度:o(nlog₂n)。
最壞情況:待排陣列是正序或反序,那麼每次劃分都只能有乙個子串行。
時間複雜度:o(n²)。
快速排序是一種不穩定的排序。
三、演算法實現(主要**)
public
class quicksortarray
while(lo=arr[lo]) //左側掃瞄
lo++; //左標記位向後移動一位
if(lo//出現比基準值大的數
system.out.println("");
swap(arr,lo,hi); //交換2個值
hi--; //右標記位向前移動一位}}
//成功進行了第一次劃分,下面分別利用遞迴對基準值左右兩側的陣列進行快速排序
if(lowindex1);
}if(hi1,highindex);}}
private
void
swap(int arr, int lo, int hi)
}
排序演算法 快速排序 java實現
它採用了一種分治的策略,通常稱為分治法。分治法思想 將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。對於陣列a,隨機選擇乙個元素作為基準數pos,一般為第乙個元素或最後乙個元素。將該陣列分為兩堆a 0,pos index 1 和 a ...
java實現快速排序演算法
快速排序是應用很廣泛的排序演算法。主要原因是它實現簡單 適用於各種不同的輸入資料且在一般應用中比其他排序演算法都要快得多。快速排序主要思想就是當兩個子陣列都有序時整個陣列也就自然有序了。而這個過程就是先選出乙個基準數,一般都選第乙個,然後基準數的左邊都是小於基準數的,基準數的右邊都是大於基準數的。然...
JAVA實現快速排序演算法
排序快速演算法的英文 氣泡排序 的改進,比起氣泡排序,快速排序演算法的速度要快了很多 快速排序演算法的原理 若有乙個陣列為a,長度為n 獲取乙個key 一般是陣列的第乙個元素 設定兩個引數 i,j 中,i 0,j n 1 先從j開始往前搜尋 j 如果a j key,則將a j 的中的值賦給a i 即...