当前位置: 首页 > 面试题库 >

如何快速稳定地对数组排序?

何玺
2023-03-14
问题内容

我一直在使用sort()函数,但它混合了相对顺序。

这就是我的代码的样子。

recipes.sort { $0.skill.value <= $1.skill.value }

Swift API表示:

排序算法不稳定。不稳定排序可能会更改比较相等的元素的相对顺序。

如何更改此值,以使相对顺序保持与以前相同?


问题答案:
let sortedArray = (recipes as NSArray).sortedArray(options: .stable, usingComparator: { (lhs, rhs) -> ComparisonResult in
    let lhs = (lhs as! Recipe)
    let rhs = (rhs as! Recipe)
    if lhs.skill.value == rhs.skill.value {
        return ComparisonResult.orderedSame
    } else if lhs.skill.value < rhs.skill.value {
        return ComparisonResult.orderedAscending
    } else {
        return ComparisonResult.orderedDescending
    }
})

从这里获取:https : //medium.com/@cocotutch/a-swift-sorting-
problem-e0ebfc4e46d4



 类似资料:
  • 本文向大家介绍Java版快速排序[不稳定]相关面试题,主要包含被问及Java版快速排序[不稳定]时的应答技巧和注意事项,需要的朋友参考一下 原理:分治+递归 复杂度:O(nlgn) - O(nlgn) - O(n^2) - O(1)[平均 - 最好 - 最坏 - 空间复杂度] 栈空间0(lgn) - O(n)

  • 问题内容: 不久前我问过类似的问题。有人问我怎样才能变成这样的数组: 对此: 但是现在我想把相同的数组变成这个: 假设所有子数组具有相同的长度。 如果您尚未注意到,结果中的前三项就是这三个子数组中的第一项。结果中的第四,第五和第六项是每个子数组的第二项。 如果您仍然不了解,也许这会有所帮助: 原始数组: 结果: 此刻,我有这个: 我认为那不是很花钱。如何快速进行此操作? 为了避免成为XY问题,这就

  • 我有INT数组 我也在寻找类似的问题,但我只发现了java.util.stream.stream .sorted()的大O复杂性,这一点也没有帮助,因为有两个不同的答案(第一个当然是部分错误的,因为arrays.sort并不总是O(n log n))。第二个呢?我还没找到证据。

  • 问题内容: 在 给定目标索引数组的情况下,如何对给定数组 进行 排序? 例如: 我尝试了以下算法,但在上面的第二个示例中失败了。 您如何在O(n)时间和O(1)额外空间中解决此问题? 您能否提供证明您的算法有效的证据? 注意: 这个问题看起来与此类似,但是这里允许变异。 问题答案: 该算法失败,因为它在列表的索引上只有一个循环。 您的算法中发生的事情是这样的: 请注意,第一次交换是如何进行的,除非

  • 我有一个对象数组: 联系类: 我想按然后按对该数组进行排序,以防某些联系人获得相同的。 我可以按其中一个标准排序,但不能两个都选。 如何添加更多条件来对此数组进行排序?