O(n)和O(1)时间对数组进行排序
来源:互联网 发布:淘宝贷买家可以贷款吗 编辑:程序博客网 时间:2024/05/22 16:49
转载请注明来自souldak,微博:@evagle
题目:给你一个待排序数组,有正有负,要求在O(n)时间和O(1)空间内将数组中的负数放在整数前面,但是负数之间的顺序不变,正数间的顺序也不变(即要求是stable的排序)。例如 -1 1 3 -2 2排序后是-1 -2 1 3 2.
大家有时间和兴趣研究的可以去看一下这个paper,或者有更好更简单的方法还请告知我(微博:@evagle),thanks!
题目:给你一个待排序数组,有正有负,要求在O(n)时间和O(1)空间内将数组中的负数放在整数前面,但是负数之间的顺序不变,正数间的顺序也不变(即要求是stable的排序)。例如 -1 1 3 -2 2排序后是-1 -2 1 3 2.
第一想法是quick sort 的partition方法,它可以实现O(n)的时间和O(1)的空间,但是它不是stable的,不能保证正数/负数之间的顺序不变。如果要stable貌似就很难O(n)。其他的方法例如可以修改merge sort得到stable的排序,但是它需要O(nlogn)的时间和O(n)的空间,所以是行不通的。
下面是一个网友的解答:
这个问题属于stable 0-1 sorting的问题,有一篇论文:http://www.diku.dk/hjemmesider/ansatte/jyrki/Paper/KP92b.pdf
采用的一种块排序的方法 block sorting
采用的一种块排序的方法 block sorting
大家有时间和兴趣研究的可以去看一下这个paper,或者有更好更简单的方法还请告知我(微博:@evagle),thanks!
- O(n)和O(1)时间对数组进行排序
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 对1...n,数组长度未知进行交换排序(无重复值,时间复杂度O(n), 空间复杂度O(1))
- 要求对数组a进行排序,要求时间复杂度为O(N)
- 算法习题49:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 如何对n个整数数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 1~n无序数组时间复杂度为O(n)排序
- 1~n无序数组时间复杂度为O(n)排序
- 实现一个排序算法,对0~n-1范围内的n个不重复的无序数组进行排序,时间复杂度为O(n),空间复杂度为O(1)。
- 对n个数进行排序(空间复杂度O(1))
- 一道看上去很吓人的算法面试题:如何对n个数进行排序,要求时间复杂度O(n),空间复杂度O(1)
- 字符串的解压缩
- 黑马程序员------面向对象(No.5)(final、抽象类)
- 修复打开Excel提示,“您尝试打开的文件的格式与文件扩展名指定的格式不一致,打开前请验证文件示被损坏且来源可信,是否立即打开该文件?”
- 杭电2098,分拆素数和,不是最简单的简单数学题
- 每一位计算机工程师都应该知道的数字(by Jeff Dean)
- O(n)和O(1)时间对数组进行排序
- [cocos2d-x]图层的旋转缩放效果
- 搭建家用的OpenVPN服务器
- ListIterator中的双向迭代输出
- shell常用判断语句
- Jokes about Jeff Dean
- 最实用的10个重构小技巧
- fork缓冲
- 生成不重复的随机数(C#,C++)