快排是最重要,使用最多的一种排序方法,其思想应用在了很多其他的快速查找等算法里。
主要思想是:
1.把数组的第一个元素作为基准(pivot),将数组划分;
2.比较要查找的值与pivot的大小,确定在左半边还是右半边进行递归查找
public static void quickSort(int []d,int left,int right){ //left,right均为元素位置
int low =left -1;
int high =right -1;
int pivot =d [low ]; //将第一个元素作为pivot
while(low <high ){
while(low <high &&d[high]>=pivot) high--;
d[ low]= d[ high];
while(low <high &&d[low]<=pivot) low++;
d[ high]= d[low];
}
d[ low]= pivot;
if(left <low ) quickSort (d ,left ,low);
//对left和pivot值及左边)之间的元素递归调用快排
if(high+2< right) quickSort(d,high+2,right);
//对pivot值右边)和right之间的元素递归调用快排
}
快排的平均时间复杂度为O(n*log2n)。快排不是一种稳定的排序方法。
分析方法(最好情况下):n+2*n/2+4*n/4+…+n*n/n=n(lgn+1)