ios - 快速排序数组

标签 ios arrays swift sorting

我有一个整数数组,代表它们自己的字符串。

我知道有一些简单的方法可以对整数数组进行排序,但我需要这样做以使整数保持与字符串的对应关系。

这是我当前的代码:

var i = 0
var highestValueObjectInArray = 0
for object in createTimerData.speechTimeStamps {

    if object > highestValueObjectInArray {
        highestValueObjectInArray = object
    }

}

while i + 1 < createTimerData.speechTimeStamps.count {

    if createTimerData.speechTimeStamps[i] < createTimerData.speechTimeStamps[i + 1] {

        let TS2 = createTimerData.speechTimeStamps[i + 1]
        let TSS2 = createTimerData.speechText[i + 1]

        createTimerData.speechTimeStamps.remove(at: i + 1)
        createTimerData.speechTimeStamps.insert(TS2, at: i)
        createTimerData.speechText.remove(at: i + 1)
        createTimerData.speechText.insert(TSS2, at: i)

    }

    i += 1
    if i+1 >= createTimerData.speechTimeStamps.count {

        var lastItem = highestValueObjectInArray + 1
        var inDescendingOrder = true
        for object in createTimerData.speechTimeStamps {
            if object < lastItem {} else { inDescendingOrder = false }
            lastItem = object
        }
        if inDescendingOrder == false {
            i = 0
        }
    }
}

它非常慢而且效率不高,所以当它对大型数组进行排序时会花费大量时间。有没有我忽略的方法,或者更有效的方法。

非常感谢任何帮助,谢谢。

最佳答案

通常,当您想要将单独的数组并排排序时,您真的应该考虑将它们合并为一个自定义类型的数组。例如,speechTextspeechTimestamps 可能会合并到一个单一类型的数组中,Speech:

struct Speech { 
    let text: String
    let timestamp: Int
}

let speeches = [
    Speech(text: "Baz", timestamp: 2),
    Speech(text: "Bar", timestamp: 3),
    Speech(text: "Foo", timestamp: 1)
]

然后你可以按照你认为合适的方式对这些进行排序:

let result = speeches.sorted { $0.timestamp < $1.timestamp }

显然,适当修改类型和名称,但希望这能说明这个想法。考虑一个类型的单个数组,它捕获正在排序的两个事物。

关于ios - 快速排序数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48110136/

相关文章:

ios - 如何检查 firebase 子节点的特定值(UID)?

javascript - 如何在 JavaScript 中取消移位或添加到参数对象的开头

ios - IBOutlets 和 IBactions 需要!到底

ios - SWIFT - JSON 错误 : The data couldn’t be read because it isn’t in the correct format

php - iOS 的自动续订订阅 : How to get Server-side receipt validation?

ios - 合并两个相同类型的对象

c++ - 是否有可能实现一个与数组而不是单个对象一起工作的内存池?

ios - 如何比较 Swift 3 中的 UIViewController?

iphone - 如何在移动时调整 UIView 的大小,就像 SnapGuide 一样?

java - 只打印数组中 3 的倍数