* 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。java
* 步骤为:app
* 从数列中挑出一个元素,称为"基准"(pivot),从新排序数列,全部元素比基准值小的摆放在基准前面,全部元素比基准值大的摆在基准的后面(相同的数能够到任一边)。ide
* 在这个分区结束以后,该基准就处于数列的中间位置。这个称为分区(partition)操做。ui
* 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。spa
/** * * @author Administrator * */ public class QuickSort { public static void main(String[] args) { int number[] = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48 }; compare(number,0,number.length-1); p(number); } private static void compare(int[] number, int left, int right) { if(right>left){ int pivotIndex = left; int pivotNewIndex = partition(number,left,right,pivotIndex); compare(number,left,pivotNewIndex-1); compare(number,pivotNewIndex+1,right); } } private static int partition(int[] number, int left, int right, int pivotIndex) { int pivotValue = number[pivotIndex]; swap(number,pivotIndex,right);//基数交换到最后位置 int storeIndex = left; for (int i = left; i < right; i++) { if(number[i]<pivotValue){ swap(number,storeIndex,i); storeIndex = storeIndex+1; } } swap(number,right,storeIndex); return storeIndex; } private static void swap(int number[],int index1,int index2 ) { int temp = number[index2]; number[index2] = number[index1]; number[index1] = temp; } private static void p(int num[]) { StringBuilder sb = new StringBuilder(num.length); for (int i = 0; i < num.length; i++) { sb.append(num[i]); sb.append(" "); } System.out.println(sb.toString()); } }