第一次迴圈,frist指向arr[0],last指向arr[9]。首先從右開始尋找小於基準數6的元素,last指向arr[7]=5,frist從左尋找大於基準數6的元素,指向arr[3]=7,交換兩個位置的值int arr=;
int frist=0;
intlast=9;
last繼續向左移動,指向arr[6]=4,frist向右移動,指向arr[4]=9,交換值int arr=;
int frist=3;
intlast=7;
接下來,last繼續向左移動,指向arr[5]=3,frist向右移動,指向arr[5]=3,frist=last,交換基準數與arr[5]=3位置,至此第一次迴圈結束(左邊全部小於基準數6,右邊全部大於6)。int arr=;
int frist=4;
intlast=6;
再將陣列以基準數6為中心,分為兩部分,分別作為新的陣列進行排序:int arr=;
int frist=5;
intlast=5;
2.第二次迴圈int arr1=;
int arr2=;
第一部分,新的基準數為3,last,frist分別尋找小於,大於基準數3的元素,交換它們的位置,直至frist=last
再將陣列以基準數3為中心,分為兩部分,分別作為新的陣列進行排序://start
int arr=;
int frist=0;
intlast=4;
//第一次交換,frist=last基準數與arr[2]=2交換
int arr=;
int frist=2;
intlast=2;
第二部分,新的基準數為9,last,frist分別尋找小於,大於基準數9的元素,交換它們的位置,直至frist=lastint arr1=;
int arr2=;
再將陣列以基準數9為中心,分為兩部分,分別作為新的陣列進行排序://start
int arr=;
int frist=6;
intlast=9;
//第一次交換,frist=8,last=9 arr[9]=8與arr[8]=10交換
int arr=;
int frist=8;
intlast=9;
//第二次交換,frist=last=8 基準數9與arr[8]=8交換
int arr=;
int frist=8;
intlast=9;
3.第三次迴圈int arr1=;
int arr2=;
第一部分,新的基準數為2,last,frist分別尋找小於,大於基準數3的元素,交換它們的位置,直至frist=last
往下同理即可。。。//start
int arr=;
int frist=0;
intlast=1;
//第一次交換,frist=last基準數與arr[2]=2交換
int arr=;
int frist=2;
intlast=2;
3.遞迴**實現
遞迴排序過程public
class quicksort
while (arr[i] <= temp && i < j)
if (i < j)
}if (i == j)
fristbasevalue(arr, frist, i - 1);
fristbasevalue(arr, i + 1, last);
}}
測試**[6, 1, 2, 7, 9, 3, 4, 5, 10, 8]
;frist=0;last=9
[3, 1, 2, 5, 4, 6, 9, 7, 10, 8]
;frist=0;last=4
[2, 1, 3, 5, 4, 6, 9, 7, 10, 8]
;frist=0;last=1
[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]
;frist=0;last=0
[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]
;frist=0;last=-1
[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]
;frist=1;last=0
[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]
;frist=2;last=1
[1, 2, 3, 5, 4, 6, 9, 7, 10, 8]
;frist=3;last=4
[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]
;frist=3;last=3
[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]
;frist=3;last=2
[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]
;frist=4;last=3
[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]
;frist=5;last=4
[1, 2, 3, 4, 5, 6, 9, 7, 10, 8]
;frist=6;last=9
[1, 2, 3, 4, 5, 6, 8, 7, 9, 10]
;frist=6;last=7
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=6;last=6
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=6;last=5
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=7;last=6
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=8;last=7
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=9;last=9
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=9;last=8
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
;frist=10;last=9
public
void
fristbasevalue() ;
quicksort sort=new quicksort();
sort.fristbasevalue(arr,0,arr.length-1);
}
快速排序java簡單實現
快速排序簡單實現 將陣列的某一段元素進行劃分,小的在左邊,大的在右邊 param a 陣列 param start 開始的位置 param end 結束的位置 return 基準值的位置 public static intdivide int a,int start,int end 上面的while...
排序演算法 快速排序 java實現
它採用了一種分治的策略,通常稱為分治法。分治法思想 將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解組合為原問題的解。對於陣列a,隨機選擇乙個元素作為基準數pos,一般為第乙個元素或最後乙個元素。將該陣列分為兩堆a 0,pos index 1 和 a ...
Java實現快速排序演算法
一 演算法描述 快速排序是對氣泡排序的一種改進。在氣泡排序中,記錄每次都是與相鄰位置上的資料作比較,因此每次只能移動乙個位置。而在快速排序中,記錄的比較和移動都是從兩端向中間進行的。其主要思想 首先在待排序陣列中選取乙個基準值 作為比較物件 然後利用基準值將待排陣列分成2個部分。基準值左邊的陣列的資...