标签:style class blog code http tar
概述:排序算法可分为比较性的排序,以及运算性的排序;这里详细介绍这些排序的原理,性能,实现,以及应用场合。
比较排序
一:快速排序
1:原理
采用了分治思想,在序列A[p...r]中选取一个元素,当然这里是用了p或者r处的元素(规格一致);找到该元素的,满足前面的值都比它小,后面的都比它大;同理让子序列递归下去。
2:性能
最坏时间复杂度:θ(n²)---出现在序列是顺序的,导致极度不平衡划分,1:0效果划分。
最好时间复杂度:θ(nlog2(n))---出现在每次划分都是在中间处;
中间状态:比如划分比例是a:b;则复杂度就是a/(b+a);b/(b+a)取大的(假设为a/(b+a)),则复杂度为θ(nlog(b+a)/a(n))其实也可以是θ(nlog(n))
平均复杂度也就是θ(nlog(n));
空间复杂度为:0;
3:应用
实际排序中比较好,适合对平均时间复杂度有要求,要求原址排序,且隐含因子比较小;应用场景多。
4:实现----c++代码实现如下
void exchang(int * sort,int i,int j) { int temp=0; temp=sort[i]; sort[i]=sort[j]; sort[j]=temp; } int partition(int *sort ,int p,int r) { int x=sort[r]; int i=p-1; for(int j=p;j<r;j++)//p--->r-1 if(sort[j]<=x) { i++; if(i!=j) exchang(sort,i,j); } if((i+1)<r) exchang(sort,i+1,r); return i+1; } //栈溢出,原因是它递归太深了 void QuickSort(int *sort ,int sn,int en) { if(sn<en) { int q=partition(sort,sn,en); QuickSort(sort,sn,q-1); QuickSort(sort,q+1,en); } }
标签:style class blog code http tar
原文地址:http://www.cnblogs.com/miner007/p/3786069.html