快速排序
快速排序:
- 递归----乱序的数组,不能使用在链表
- 关键思想 枢轴划分
代码:
void Qsort(int A[],int L,int R){
if(L==R) return; //递归终止
int M=partition(A,L,R);
Qsort(A,L,M-1); //左半部分快排
Qsort(A,M+1,R); //右半部分快排
}
int partition(int A[],int L,int R){
int mid = A[L];
while(L<R){
while(A[R]>mid) R--;
A[L]=A[R];
while(A[L]<mid) L++;
A[R]=A[L];
}
A[L]=mid;
return L;
}
空间效率:由于快排是递归的,需要借助一个递归工作栈来保存每层递归调用的必要信息,其容量与递归调用的最大深度一致,平均空间复杂度为O(log2n)
时间效率:快排的运行时间与划分与是否对称有关,平均时间复杂度为O(nlog2n)