排序算法-高级篇(基数排序)

本文介绍基数排序算法,并通过实例展示其高效性。针对整数排序,基数排序采用非比较方式,时间复杂度为O(nlog10(max))。文章提供详细的实现代码及一千万规模数据的排序测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序算法-高级篇

在前两篇文章中,我回归了最基本最easy的排序算法(冒泡排序、选择排序)它们的时间复杂度都为O(n^2)和快速排序(时间复杂度为O(nlog(n))),而选择我要回顾的是更为高效的基数排序(非比较排序,基数排序的使用范围有所限制,它只能用在正整数的排序)它的时间复杂度为O(nlog10(max)),max = Max{data[0], data[1], ...}。我程序的实现是从低位->高位进行扫描。下面举个例子。

有数据 data[6] = {13, 14, 15, 24, 35, 100},因为max = 100,所以要扫描3遍,算法的执行过程如下:

扫描第一遍

0 100

1

2

3 13

4 14 24

5 15 35

6

7

8

9

data[6] = {100, 13, 14, 24, 15, 35};


扫描第二遍

0 100

1 13 14 15

2 24

 

3 35

4

5

6

7

8

9

data[6] = {100, 13, 14, 15, 24, 35};

 

扫描第三遍

0 13 14 15 24 35

1 100

 

2

 

3

4

5

6

7

8

9

data[6] = {13, 14, 15, 24, 35, 100};


实现代码如下:

 

对于一千万的规模排序时间只需要3秒,可见其高效性。

运行结果如下(使用的IDE是MinGW):

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值