转载请注明出处:http://blog.csdn.net/droyon/article/details/8790237
/**
* 快速排序,分治策略。该递归发挥作用了
* 第一步,固定temp=array[0]
* 第二步,j=array.length-1.从j向左(j--)开始遍历查找第一个小于temp的元素,替换。
* 第三步,i=0,从i开始向右(i++)遍历查找大于temp的第一个元素,替换。
* 判断i==j,
* 如果相等,递归。
* 如果不等,循环第二、三步。
* @author
*
*/
public class QuickSort {
private static int[] array = new int[]{1,8,2,9,3,7,11,23,90,4,5};
public static void main(String args[]){
System.out.println("排序前");
printArray();
System.out.println("\n排序后");
quickSort(array,0,array.length-1);
printArray();
}
private static void quickSort(int[] arr,int first,int end){
int firstPos = first;
int endPos = end;
boolean tranfer = true;
if(first>=end){
return;
}
while(firstPos!=endPos){
/**
* 固定比对元素arr[firstPos],
* 从右开始向左遍历,查找小于arr[firstPos]的元素,替换。
* 然后从左向右遍历,查找第一个大于arr[endPos](也就是刚才的arr[firstPos],因为执行了一步替换),替换。
*/
if(arr[firstPos]>arr[endPos]){
int temp = arr[endPos];
arr[endPos] = arr[firstPos];
arr[firstPos] = temp;
tranfer=tranfer?false:true;
//要查看每一次替换结果,将下面打开
// System.out.println((tranfer?"从右向左查":"从左向右查")+"["+first+"-"+end+"]");
// printArray();
// System.out.println();
}
if(tranfer){
endPos--;
}else{
firstPos++;
}
}
//System.out.println("比对结束"+"["+firstPos+"-"+endPos+"]");
firstPos--;
endPos++;
quickSort(arr, endPos, end);
quickSort(arr, first, firstPos);
}
public static void printArray(){
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
}
}
结果:
排序前
1 8 2 9 3 7 11 23 90 4 5
排序后
1 2 3 4 5 7 8 9 11 23 90