我一直在谷歌(当然还有堆栈溢出!)中搜索一种方法来按值对整数列表进行排序,但也按一个额外的因素进行排序。我想我正在寻找某种算法来实现。到目前为止,我在 Delphi 2007 中有一个数组将值从最大到最小排序,但现在我希望它对仅比列表中的前一个数字多 X 数的值进行排序。
例如,值5、7、25、15目前排序为25、15、7、5。我现在试图得到的顺序,X值为5,是25、15、5, 7. 如您所见,5 和 7 没有调换位置,因为它们之间的差值不超过 5。
不确定我是否解释得特别好,但这是一般的想法。
另一个例子是值 10、40、18、20、16、28。排序后,它们应该是 40、28、18、20、16、10。18、20 和 16 没有移动,因为同样,每个数字之间的距离不超过 5。
其背后的想法是,与数字相关联的项目(例如某物的订购次数)不会因为只有 1 或 2 的差异而一直变化。例如,如果最常订购的纸张列表按购买频率显示在网页上,然后特定类型纸张的订单只有在订购次数是下一个最频繁的次数的五倍以上时才会为用户更改。
希望这是有道理的,感谢您的宝贵时间!
最佳答案
我认为您的要求会导致非常奇怪的结果。最终,您可以有一个排序顺序,其中项目以完全错误的方式排序,并且它们的排序方式取决于它们的变化方式。
我认为您需要建立值的“类别”(使用百分位数?),然后在每个类别中按字母顺序对报纸进行排序。
例如:勉强排序(90% 的报纸的排序比这一篇多),低于中位数(50% 的报纸的排序比这些多),高于中位数,排名前 10 位(按订单数量排序)当然)。
关于algorithm - 排序值,但前提是它们比当前顺序多 X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/469055/