【练习3.13】

利用社会安全号码对学生记录构成的数组排序。编写一个程序进行这件工作,使用具有1000个桶的基数排序并且分三趟进行。

 

Answer:

首先,对社会安全号码不了解的就把它当成一个不超过9位的正整数就好了。

于是题目就是,通过1000个桶,对9位正整数进行桶排序。

因为一次最多比较三位(1000桶),刚好分三趟进行,加上最后复制回数组的一次,共遍历数组长度四次,时间复杂度O(N)

 

测试代码:

 1 #include <iostream>
 2 #include "linklist.h"
 3 using namespace std;
 4 using namespace linklist;
 5 template class List<int>;
 6 int main(void)
 7 {
 8     int numbers[] = { 111111111, 234543213, 298787536, 639383374, 212394837, 192837467, 81293874, 847920876, 908746573, 876418193 };
 9     bucketsort(numbers, 10);
10     for (auto elem : numbers)
11         cout << elem << endl;
12 
13     system("pause");
14 }
View Code

相关文章: