为了解决凸包问题,尽量降低时间复杂度,写了一个快速排序算法。
此快排算法的主要过程是:
1.选择数组第一个数作为基准X
2.从右往左找第一个比X小的数,放到X所在的位置,留出一个空
3.从左往右找第一个比X大的数,放在刚才空出的位置,留出一个空
4.从右往左找第二个比X小的数,放到上一个空位置,再次留出一个空
5.如此循环,直到左右相遇,把X放在最后一个空位
6.此时,X左边都是比X小,右边都比X大,对左右两边分别递归计算。
注意: 此算法递归,数组要大于3;一定要指定递归退出的条件。
public class QuickSort {
public void qs(int[] a,int c,int b){
int x=a[c];
int i=c;
int j=b;
if(c<b){ //此处为递归的退出条件
while(i<j){
while(i<j&&x<a[j]){ //从右往左找比基准大得数
j--;
}
a[i]=a[j];
while(i<j&&x>=a[i]){
i++;
}
a[j]=a[i];
}
a[i]=x;
qs(a,c,i-1);
qs(a,i+1,b);
}
}
}