標籤:int font 重複 空間複雜度 時間複雜度 out java while bsp
基本過程:
- 設定兩個變數i、j,排序開始的時候:i=0,j=N-1;
- 以第一個數組元素作為關鍵資料,賦值給key,即key=a[0];
- 從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於key的值A[j],將A[j]和A[i]互換;
- 從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於key的A[i],將A[i]和A[j]互換;
- 重複第3、4步,直到i=j; (3,4步中,沒找到合格值,即3中A[j]不小於key,4中A[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止)。
代碼實現:
public class KuaiSu { public static void main(String []args){ int[] a = {12,20,5,16,15,1,30,45,23,9}; int low = 0; int high = a.length-1; paixu(a,low,high); for(int i = 0; i<a.length; i++){ System.out.print(a[i]+","); } } public static void paixu(int[] a,int low,int high){ if(low<high){ int key = sort(a,low,high); paixu(a,low,key-1); paixu(a,key+1,high); } } public static int sort(int[] a,int low,int high){ int key = a[low]; while(high>low){ //從後往前比較 while(high>low&&a[high]>=key){ //若大於key移動位置 high--; } a[low]=a[high]; //不大於,交換兩個值 //從前往後比較 while(high>low&&a[low]<=key){ //若小於key移動位置 low++; } a[high]=a[low]; //不小於,交換兩個值 } a[low]=key; return low; }}
演算法效能分析:
時間複雜度:快速排序最壞的時間複雜度為O(n^2),平均時間複雜度為O(nlogn)。
空間複雜度:O(n)。
穩定性:由於在直接選擇排序中存在著不相鄰元素之間的互換,因此,直接選擇排序是一種不穩定的排序方法。
Java排序演算法之快速排序