求个按key排序value的【快速】算法

清晨曦月
博客专家认证
2012-12-16 08:59:27
我有两个长度相等的数组
key: 0, 120, -100, 97, 66, 66, 34, 2, -1024, 0……
val: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9……
按KEY(有相等的)对VALUE进行排序,要求是:

0、最好是快速排序算法,不要冒泡啊之类慢的,接口啊之类类库实现的。
1、KEY数组不要变,仅要VALUE按KEY排序的结果。
2、有阀值,也就是说,当KEY小于一定程度时,例如0,那么0,-100,-1024对应的VALUE的元素0,2,8,9放在排序结果之后(可以不是0,2,8,9这个顺序),最好返回排序结果中从哪个元素开始小于阀值。
3、KEY相等时,谁在前都可以。

就上面的key和val,若阀值为0则排序结果应该是(key不变的):
val: 1, 3, 4, 5, 6, 7, 0,2,8,9 (返回小于阀值的位置为5或6,也就是7或0所在的位置额,数组下标为1的语言的话就是小于阀值位置为6或7)

越快越好…………额,代码和代码速度都是O(∩_∩)O~





另外问一个问题是否可能有解决方法:(如果有开个新帖子)
我把一组数据均为数字(为了看清楚,下标标记在上面)
下标:0,1,2,3,4,5,6,7,8,9
数据:A,B,C,D,E,F,G,H,I,J(用字母代替数据,其实与算法无关吧)

分成若干段
0,1,2,3,4,5,6,7
A,B,C,D,E,F,G,H

0,1,2,3,4,5,6,7
B,C,D,E,F,G,H,I

0,1,2,3,4,5,6,7
C,D,E,F,G,H,I,J



就是把10长度的数组用3个8长度的表示(其实我也很无奈),在我进行一些运算之后,会导致某些段的值发生变化(可能不变,但至少有变化的),这时我要把它们再合起来,合起来时要求每一位上取最大的。例如某次变化导致所有B变成K,而第一段的E变成了Z,第二段的E变成了Y,其他的不变。

0,1,2,3,4,5,6,7
A,K,C,D,Z,F,G,H

0,1,2,3,4,5,6,7
K,C,D,Y,F,G,H,I

0,1,2,3,4,5,6,7
C,D,E,F,G,H,I,J

这时我要重新合成起来,由于Z>Y>E,所以最终合成结果是:

下标:0,1,2,3,4,5,6,7,8,9
数据:A,K,C,D,Z,F,G,H,I,J(用字母代替数据,其实与算法无关吧)

有没有可能采用特定结构和算法优化这个过程呢……
...全文
382 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级大笨狼 2012-12-25
  • 打赏
  • 举报
回复
如果你的数据分布范围小,只是数据量大而已的话 那么其实有比快排还快的办法。 分桶!~
清晨曦月 2012-12-19
  • 打赏
  • 举报
回复
结贴了。我还是从其他角度解决这个问题,其实我有一组阀值,完全可以在我变化的过程中建立一个临时记录组,根据阀值大小直接分组,只是编码实现比较困难。第二个问题只好从根源上解决了,例如我把9个分成5长度,那么需要计算的就是5,6,7,8,9一共5个=5*5*2,但是如果分成6长度,那么就只需要计算6,7,8,9一共4个=4*4*2,这样50就变成了32,虽然中间还有一些寻址方面的消耗差异,哎,无奈啊,因为我无法把我的全部结构都存在内存里面初始化好,如果能,那么只需要一次9*2就完成了。之所以说无法都存储在内存里,是因为我的信息太长了,最长的一组有上千万个,每个结构需要45个int和30个byte。即使舍弃一部分也必须存储至少30个int和30byte所以全部存储大约需要的存储量是(30*32+30)*15000000byte大约1.5G,很苦恼,不仅需要大量的存储空间而且读到内存需要较多时间并且VB.NET特么的溢出………………
丈八涯 2012-12-17
  • 打赏
  • 举报
回复
第一个问题,既然你打算用快速排序,那就用快速排序。只是每个元素有key和val两个属性。阀值问题,就使用一个静态变量记录最大数组下标(不是val)。 第二个问题,感觉限制的原因不明,即使提出方案也不一定能用上。
清晨曦月 2012-12-16
  • 打赏
  • 举报
回复
能帮忙写一下吗,算法不通。。。哎。没学过
ronkins 2012-12-16
  • 打赏
  • 举报
回复
准备一个key的copy数组,计为ck数组 使用一次快排交换把数据以阀值为界分为两段,交换的时候需要连带着交换val里的值 然后把阀值内的那一段进行快排 空间复杂有点高... 不知道有没有更好的方法...

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧