快速排序是排序算法中平均时间复杂度为O(nlogn)的一种算法,其实现需要先解决这样一个问题。对一个序列A【1】,A【2】,A【n】调整序列中元素的位置,使得A【1】(原序列的A【1】)的左侧元素都不超过A【1】,右侧元素都大于A【1】。
1,先将A【1】存至某个零时变量temp,并令两个下标left,right分别指向首尾(如令left=0,right=n-1)
2.只要将right指向的元素A【right】大于temp,就将right不断左移;当某个时候A【right】《temp时,将元素A【right】挪到left的指向的元素A【left】处。
3.只要left指向的元素A【left】不超过temp,就将left不断右移,当某个时候A【left】挪到right指向的元素A【right】处。
4.重复2,3,直到left域right相遇,吧temp放在相遇的地方。
public class quickSort {
@Test
public void quickTest() {
int []a= {4,6,8,10,14};
quick(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public int partition(int [] A,int left,int right) {
int temp=A[left];//将A[left]存放至临时变量temp
while(left<right) {
while(left<right&&A[right]>temp)right--;
A[left]=A[right];
while(left<right&&A[left]<=temp)left++;
A[right]=A[left];
}
A[left]=temp;//此时left=right
return left;//也可以return right
}
void quick(int [] A,int left,int right) {
if(left<right) {//当前长度不超过1
//将[]按A【left】一份为二
int pos=partition(A,left,right);
quick(A,left,pos);
quick(A,pos+1,right);
}
}
}