快速排序的原理:每次將序列以一個值爲界限分成兩組,再將得到的兩個序列分別以一個界限分成兩組變成四組這樣一直分下去。
int[] a = {11,222,44,63,84,11,24,53,123,25,98,76,34};
第一步:以34將數組a分成兩組 11, 25, 24, 11 34, 63, 44, 53, 123, 222, 98, 76, 84
第二步:以11將11, 25, 24, 11分爲兩組 11, 11, 24, 25。以84將34, 63, 44, 53, 123, 222, 98, 76, 84分爲兩組34, 63, 44, 53, 76, 84 98, 123, 222。
這樣一直循環下去直到不能再分。
package test;
import java.util.Arrays;
public class QuickSort {
public void partition(int[] arrays, int left, int right) {
if ( right == 0 || left >= right){
return;
}
int oldLeft = left;
int oldRight = right;
int median = arrays[right];
right = right -1;
// 拿出數組最後一個詞作爲界限,數組的最後一個本身不參與比較
while (left<right) {
while (left < right && arrays[left] < median){left++;};
while (left < right && arrays[right] >= median){right--;};
int temp = arrays[right];
arrays[right] = arrays[left];
arrays[left] = temp;
}
if(arrays[oldRight] < arrays[right]){
arrays[oldRight] = arrays[right];
arrays[right] = median;
}
partition(arrays,oldLeft,left);
partition(arrays,right+1,oldRight);
}
public static void main(String[] args) {
int[] a = { 11, 222, 44, 63, 84, 11, 24, 53, 123, 25, 98, 76, 34 };
new QuickSort().partition(a,0,a.length-1);
System.out.println(Arrays.toString(a));
}
}