排序不同长度的数据项
来源:互联网 发布:淘宝banner加链接 编辑:程序博客网 时间:2024/05/22 15:13
问题一:给定一个整数数组,其中不同的整数中包含的数字个数可能不同,但该数组中,所有整数中总的数字数是n。说明如果在O(n)时间内对该数组进行排序。
解体思路:
1. 数组中的元素总共m个,对每个元素构造struct{element, length},将这m个struct进行桶排序,存入Bucket[1], ..., Bucket[k]中,合并到数组T中。过程1算法复杂度为O(m)。
2. 进行基数排序:i从1到k,第i次循环时,分两种情况讨论:
(1)将T中元素的第i位进行计数排序,并将struct.length = i的元素依照其在T中的先后顺序压入数组O末尾,删除T中的这些struct,继续下一次循环。
(2)如果T中元素只剩一个,则将该元素压入数组O末尾,跳出循环。
过程2每一次循环的算法复杂度为O(10 + 拥有第i位的元素数目)
3. 循环结束时,数组O便是排好序的数组了,元素顺序从小到大。
分析复杂度,我们不难看出,为O(n)。
问题二:给定一个字符串数组,其中不同的串包含的字符数可能不同,但所有串中总的字符个数为n。说明如何在O(n)时间内对该数组进行排序。(注意此处的顺序是指标准的字母顺序,例如,a<ab<b)
解题思路:
1. 数组中的字符串元素总共m个,对每个元素构造struct{element, length},将这m个struct进行桶排序,存入Bucket[1], ..., Bucket[k]中。过程1的算法复杂度为O(m)。
2. 进行基数排序:i从1到k,第i次循环时,将Bucket[k -i + 1]的元素并入T末尾,并对T中元素T[i]的第(T[i].length - k + i)位计数排序,从大到小。过程2每一次循环的算法复杂度为O(26 + Bucket[k - i + 1]到Bucket[k]中的元素数目)
3. 当i = k循环结束后,排序结束,取出T中的element即可。
分析复杂度,我们不难看出,为O(n)。
- 排序不同长度的数据项
- 排序不同长度的数据项
- 算法导论8-3思考题-排序长度不同的数据项
- 算法导论-8-3-排序不同长度的数据项
- 算法导论-8-3-排序不同长度的数据项
- 算法导论-8-3-排序不同长度的数据项
- 算法导论习题8-3—排序不同长度的数据项
- 更新sql server数据项的长度
- 不同长度的字符串数组排序
- 8-3变长数据项的排序
- 变长数据项排序
- 对LinkedHashMap进行数据项的上移或下移排序
- 算法导论 8-3思考题 之变长数据项的排序
- 获取不同长度的UUID
- DataGrid数据项的手工添加
- 不同排序的关系
- 不同浏览器的url长度限制
- 随机生成不同长度的字符串
- 用mod_deflate来开启Gzip压缩网页提高网站速度
- Linux Tar 命令压缩解压缩参数详细指南
- 没有等级的区分
- 研磨设计模式之单例模式-2
- word 2003中的收藏夹功能
- 排序不同长度的数据项
- epoll精髓
- .NET MD5 加密(备忘)
- struts标签html:checkbox
- java操作Excel
- 决定好好学习了,加油选好技术
- 减少眼疲劳,IE浏览器使用淡苹果绿背景色
- 查看和设置oracle数据库的最大连接数
- 交换两个变量,而不引用第三个变量