快速排序
首先简单描述一下快速排序
1. 快速排序树不稳定的(由于关键字的比较与交换是跳跃进行的)
2. 时间复杂度为o(n*logn) (最好情况为n*logn 若数组基本有序为n*n)
3. 空间复杂度为logn
(主要是递归造成的栈空间的使用,最好情况,递归树的深度为log2n,其空间复杂度也就为O(logn),最坏情况,需要进行n‐1递归调用,其空间复杂度为O(n),平均情况,空间复杂度也为O(logn))
时间复杂度分析
根据上图的算法演示树的深度为4
每一层的比较次数为8,7,5,1
因为快排的时间复杂与待排数组的本身有联系的
所以平均时间复杂度为 logN(层数)*N(每层比较n次)
下面来看最坏的情况的时间复杂度
时间复杂度为 4+3+2+1
即 n(1+n)/2=o(n*n)
#include<iostream>
using namespace std;
//
int partsort(int* src,int low,int height){
int temp=src[low];
while(low<height){
while(low<height&&src[height]>=temp)
height--;
src[low]=src[height];
while(low<height&&src[low]<=temp)
low++;
src[height]=src[low];
}
src[low]=temp;
return low;
}
//快速排序
int quicksort(int* src,int low,int high){
if(low<high){
int pos= partsort( src, low, high);
quicksort( src, low,pos-1);
quicksort( src,pos+1,high);
}
}
int main(){
int src[]={
1,34,5,23,656,34,67
};
quicksort(src,0,6);
for(int i=0;i<=6;i++){
cout<<src[i]<<endl;
}
}
部分参考《大话数据结构》
如有错误欢迎提出