一、概述
1.平均時間複雜度:o(n*lgn)
2.最壞時間複雜度:o(n^2)
3.空間複雜度:o(n*lgn)
4.快速排序是乙個不穩定的排序.它通常是用於排序的最佳選擇,因為排序最快也只能達到o(n*lgn)
5.快速排序演算法的描述
快速排序是基於分治模式處理的.
舉乙個典型的例子:對於arr[p...r]排序的分治過程如下:
* 分解:
arr[p...r]被劃分為兩個(有可能有空的)的字陣列arr[p...q-1]和arr[q+1...r],使得
arr[p...q-1] <= arr[q+1...r]
* 解決:通過遞迴呼叫快速排序,對字陣列arr[p...q-1]和arr[q+1...r]
* 合併.
二、**實現
/*
* 次演算法採用演算法導論中的版本,即選取最後一位作為主元
*/public class quicksort ;
system.out.println("排序前:"+arrays.tostring(arr));
quicksort(arr,0,arr.length-1);
system.out.println("排序後:"+arrays.tostring(arr));
} //快速排序
public static void quicksort(int arr,int l, int h)
} //分治過程,快速排序的核心
public static int partition(int arr, int l, int h)
}swap(arr,i+1,h);
return i+1;
} //交換陣列中兩個腳標中的內容
public static void swap(int arr, int i, int j)
}
排序演算法 快速排序 java實現
它採用了一種分治的策略,通常稱為分治法。分治法思想 將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。對於陣列a,隨機選擇乙個元素作為基準數pos,一般為第乙個元素或最後乙個元素。將該陣列分為兩堆a 0,pos index 1 和 a ...
Java實現快速排序演算法
一 演算法描述 快速排序是對氣泡排序的一種改進。在氣泡排序中,記錄每次都是與相鄰位置上的資料作比較,因此每次只能移動乙個位置。而在快速排序中,記錄的比較和移動都是從兩端向中間進行的。其主要思想 首先在待排序陣列中選取乙個基準值 作為比較物件 然後利用基準值將待排陣列分成2個部分。基準值左邊的陣列的資...
java實現快速排序演算法
快速排序是應用很廣泛的排序演算法。主要原因是它實現簡單 適用於各種不同的輸入資料且在一般應用中比其他排序演算法都要快得多。快速排序主要思想就是當兩個子陣列都有序時整個陣列也就自然有序了。而這個過程就是先選出乙個基準數,一般都選第乙個,然後基準數的左邊都是小於基準數的,基準數的右邊都是大於基準數的。然...