快排是一个应用较多的排序算法时间复杂度是o(nlogn)
快速排序运用递归需要一个基准数默认传入的第一个数是基准数 base=a[low]
在low-high 遍历 i=low j=high i++ j-- 如果a[i]>base a[j]<base a[i] a[j]交换位置直到i=j;
这时候交换base 和a[i]或者a[j](两者一样)传入(a,low,i-1)(a,i+1,high) a[i]不用在参加排序 因为在和base交换后a[i]已经排好序。
代码:
两个点比较重要 递归结束标志(low>=high) //在一些情况下 由于传进去的high=j-1;low=j+1 会出现low>high情况,可以输出自己看一下
第二个就是i,j哪一个先遍历,顺序错误会导致base排序错误,然后整个排序错误 也可以自己换位比较一下
public static void main(String []args) {
int []a=new int [] {4,14,3,6,5,1,90,0,56,7};
quickSort(0,a,a.length-1);
System.out.println(Arrays.toString(a));
}
public static void quickSort(int low,int a[],int high) {
int i=low;
int j=high;
//System.out.print(i+" "+j);
//System.out.println();
if(i>=j) {
return;
}
int base=a[i];
//int k=i;
while(i<j) {
//注意要先进行j--操作,要j指针先往前走,不然排序会出错 因为这是从小到大的排序i先走会导致base
//排序错误
while(a[j]>=base && i<j) {
j--;
}
while(a[i]<=base && i<j) {
i++;
}
if(i<j) {
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
a[low]=a[i];
a[i]=base;
quickSort(low,a,j-1);
quickSort(j+1,a,high);
}
}