0
プロパティ、名前、妥当性、タイムスタンプを持つオブジェクトがあります。Swift:代替キーによるソートアルゴリズムの統合
配列内のオブジェクトを、最も関連性の高い(Relevance)と最近の(Timestamp)で並べ替えるようにします。
のような:など、関連最近、関連、最近...今
、私はOの時間計算(N Nを記録)を持つ単一のキーに基づいてソートするソリューションを持っています。
ここスウィフトの私のソリューションです:
func mergeSort(array: [Entity]) -> [Entity] {
guard array.count > 1 else { return array } // 1
let middleIndex = array.count/2 // 2
let leftArray = mergeSort(Array(array[0..<middleIndex])) // 3
let rightArray = mergeSort(Array(array[middleIndex..<array.count])) // 4
return merge(leftPile: leftArray, rightPile: rightArray) // 5
}
func merge(leftPile leftPile: [Entity], rightPile: [Entity]) -> [Entity] {
// 1
var leftIndex = 0
var rightIndex = 0
// 2
var orderedPile = [Entity]()
// 3
while leftIndex < leftPile.count && rightIndex < rightPile.count {
if leftPile[leftIndex].timestamp.isGreaterThanDate(rightPile[rightIndex].timestamp) {
orderedPile.append(leftPile[leftIndex])
leftIndex += 1
} else if leftPile[leftIndex].timestamp.isLessThanDate(rightPile[rightIndex].timestamp) {
orderedPile.append(rightPile[rightIndex])
rightIndex += 1
}
else{
orderedPile.append(leftPile[leftIndex])
leftIndex += 1
orderedPile.append(rightPile[rightIndex])
rightIndex += 1
}
}
// 4
while leftIndex < leftPile.count {
orderedPile.append(leftPile[leftIndex])
leftIndex += 1
}
while rightIndex < rightPile.count {
orderedPile.append(rightPile[rightIndex])
rightIndex += 1
}
return orderedPile
}
コードがために、配列をソート完全に「最新」と私はまた、「ほとんどのためにそれをソートするために、「タイムスタンプ」を「妥当」からキーを変更することができます関連性がある。
しかし、上記のようにインターレースソートしたいのは、最も複雑です。誰にもこれに対する良い解決策がありますか?