博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线性时间排序
阅读量:7280 次
发布时间:2019-06-30

本文共 1307 字,大约阅读时间需要 4 分钟。

之前所学的排序都是基于比较的,通过两数的比较得出数的大小顺序,基于比较的算法最优的时间复杂度为n*lg(n)。

而计数排序采用了另一种方式,没有比较,让人眼前一亮。但需要特定的环境下才能行。比如输入数组需要是0~k之间的整数。

但他至少让排序能在线性时间O(n)内完成。

基数排序弥补了计数排序排列大数时需太多内存的缺陷,而且基数排序排列大数时时间也快一些。我的这个基数排序还可以改进。

1 #include
2 #include
3 4 //计数排序,A为输入数组,B为输出数组,n为数组大小,k为数组中最大的数。 5 //时间复杂度为O(n+k),取决于k,当k为O(n)时,则为线性时间。 6 //缺点为会浪费太多内存空间。 7 void COUNTING_SORT(int A[],int B[],int n,int k){ 8 int *C=malloc((k+1)*sizeof(int)); 9 int i,j=0;10 k=k+1;11 for(i=0;i
0){18 B[j]=i;19 j++;20 C[i]--;21 } 22 */23 for(i=1;i
=0;i--){
//排序稳定性26 B[C[A[i]]-1]=A[i];27 C[A[i]]--;28 }29 }30 31 //基数排序,n为数组大小,d为数组中最大数的长度;32 //h为进制,相当于计数排序中的k,可见减小了所需空间;33 //时间复杂度为O(d(n+h))34 void RADIX_SORT(int A[],int n,int d,int h){35 int i;36 int *C=malloc(h*sizeof(int));37 int *B=malloc(n*sizeof(int));38 int j=0;39 for(i=1;i<=d;i++){40 for(j=0;j
=0;j--){
//排序稳定性47 B[C[((int)(A[j]/(pow(h,i-1)))%h)]-1]=A[j];48 C[((int)(A[j]/(pow(h,i-1)))%h)]--;49 }50 for(j=0;j

 

推荐学习基数排序地址:http://www.cnblogs.com/hazir/archive/2011/05/05/2447290.html

转载于:https://www.cnblogs.com/zzsf/p/4263569.html

你可能感兴趣的文章
0823模拟赛
查看>>
Ajax
查看>>
HDU 1849 Rabbit and Grass 【Nim博弈】
查看>>
JMeter-Java压力测试工具-01
查看>>
搜狐在线笔试 时间复杂度O(n)实现数组A[n]中所有元素循环左移k个位置
查看>>
写python时加入缩进设置
查看>>
ubuntu下安装opencv 2.4.9 脚本,支持摄像头和cuda
查看>>
Tensorflow 线性回归预测房价实例
查看>>
UBUNTU tftp 配置
查看>>
利用runtime给系统类添加动态属性
查看>>
通讯录管理系统(C语言)
查看>>
PHP类与继承
查看>>
Proxifier突破代理服务器上网的限制
查看>>
Oracle(ERROR SP2-0642)
查看>>
反射加强(一)
查看>>
The class has no identifier property
查看>>
碰到的一些面试问题
查看>>
APICloud框架——总结一下最近开发APP遇到的一些问题 (二)
查看>>
python day04
查看>>
JVM的内存区域划分
查看>>