排序算法-高级篇
在前两篇文章中,我回归了最基本最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):