首页 > 代码库 > 排序算法总结
排序算法总结
概述:排序算法可分为比较性的排序,以及运算性的排序;这里详细介绍这些排序的原理,性能,实现,以及应用场合。
比较排序
一:快速排序
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); }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。