快速排序:不稳定的排序
通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
快速排序是通常被认为在同数量级(O(nlog2n))的排序方法中平均性能最好的。但若初始序列按关键码有序或基本有序时,快排序反而蜕化为冒泡排序
时间复杂度:
最差:O(n^2)
平均:O(nlog2n)
最好:O(nlog2n)
空间复杂度:
O(nlog2n)
package test;
import java.util.Arrays;
public class quickSort {
static int partition(int A[], int l, int h) {
int i = l;
int j = h;
int x = A[l];
while(i < j) {
while( A[j] >= x && i < j) {
j--;
}
A[i] = A[j];
while( A[i] <= x && i < j) {
i++;
}
A[j] = A[i];
}
A[i] = x;
return i;
}
static void qSort(int A[], int l, int h) {
if(l < h) {
int k = partition(A,l,h);
qSort(A,l,k-1);
qSort(A,k+1,h);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int A[] = new int[]{4,3,7,1,8,2,5,9,0,6};
qSort(A,0,A.length-1);
System.out.print(Arrays.toString(A));
return;
}
}