一种复杂度的为O(n)的排序方法

1. 有一种算法却不用比较,而他的时间复杂度是O(n),那就是计数排序,这个算法的思路是这个样子的,

如果由小到大排序,首先建立一个足够大的数组a[INF];把数组清0,当输入一个数m的时候 那么执行a[m]++;  

这样a[m]就是1了 如果再有同一个数等于m那么就是a[m]=2......最后输入n个数之后,我们从a[0]开始 如果a[0]等于0那么相当于n个数里没有0  接着往后走,等到了a[1]  发现a[1]3  说明这个n个数里有31,这样连续输出三个1,当遇到a[v] = t说明 有tv......最后排序结束,


当如你会发现其实这个算法有限制条件,

比如这个数里不能有太大的数 当数大于100万时,我们是无法建立一个100+的数组的

当然数也不能小于0。


其实讲这个算法的目的就是告诉一些新手 我们平时n大的数组a[i] = m, 代表存下了m  反过来想a[m] =1 ; 其余的都是0 我们岂不也同样存下了m....


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值