/**
* 快速排序
* @author Joson.Liu
* 2014.08.31
*/
public class quickSort {
public static void main(String args[]){
int[] test={5,4,3,2,8,7,1};//声明一个测试数组
for(int a:test){
System.out.print(a+",");
}
System.out.println();
QuickSort(test,0,test.length-1);
for(int a:test){
System.out.print(a+",");
}
}
/**
* 获得快速排序的枢轴位置
* @param a 待排数组
* @param low 起始位置
* @param high 结束位置
* @return 返回枢轴位置
*/
private static int partition(int[] a,int low,int high){
int pivot=a[low];//使用a[row]作为枢轴元素
while(low<high){
while(low<high&&a[high]>=pivot) //如果右边元素比枢轴元素大则左移
high--;
a[low]=a[high];//把比枢轴小的元素移到左边
while(low<high&&a[low]<=pivot)//如果左边元素比枢轴元素不则右移
low++;
a[high]=a[low];//把比枢轴大的元素移到右边
}
a[low]=pivot;//把枢轴元素值放回枢轴位置
return low;//返回枢轴位置
}
private static void QuickSort(int[] a,int left,int right){
if(left<right){
int pa=partition(a,left,right);
System.out.println(pa);
QuickSort(a,left,pa-1);//左边递归
QuickSort(a,pa+1,right);//右边递归
}
}
}
快速排序是目前最好的内部排序 但是对已经基本有序的数组 效果很差
时间复杂度范围:N*N---N*(LOGN)