swift - 如何在不使用 .sort() 的情况下对数组执行排序
问题描述
我试图找到不使用sort()
函数对数组进行排序的最简单方法。我尝试搜索,但在 SWIFT 上找不到任何问题。我发现了几个关于 php 和 javascript 的问题,但到目前为止没有任何关于 swift 的问题。
var arr = [7,6456,2135,164,1345,4,8,5,87456,123,2,87,724,6523,1]
var arrSorted = arr
var index = arr.count
repeat {
var previousSwapIndex = 0
for i in 1..<index {
if (arrSorted[i - 1] as! Int) > (arrSorted[i] as! Int) {
let prevVal = arrSorted[i - 1]
let currentVal = arrSorted[i]
arrSorted[i] = prevVal
arrSorted[i - 1] = currentVal
previousSwapIndex = i
}
}
index = previousSwapIndex
} while (index != 0)
print(arrSorted as Array)
这种方法有效,但我正在寻找比这更好且比这更容易的东西。(编辑[澄清]:-更好=更快/更快,因为在数组排序之前迭代了120次)有人可以帮我吗?
解决方案
这是Swift中插入排序的通用实现。它需要一个inout
数组,但如果这是你想要的,你应该能够修改它以返回一个数组。
func sort<T: Comparable>(_ array: inout [T]) {
var i = 1
while i < array.count {
var x = array[i]
var j = i - 1
while j >= 0 && array[j] > x {
array[j+1] = array[j]
j -= 1
}
array[j+1] = x
i += 1
}
}
要使用它:
var intArr = [1, 7, 3, 6, 4]
sort(&intArr)
print(intArr) // [1, 3, 4, 6, 7]
var stringArr = ["hello", "goodbye", "a", "string", "z", "another string"]
sort(&stringArr)
print(stringArr) // ["a", "another string", "goodbye", "hello", "string", "z"]
它适用于任何符合Comparable
.
推荐阅读
- ubuntu - 通过 OVA 部署的 Ubuntu 19.04 的凭据是什么?
- ios - 与集合视图相关的设计
- android - 如何绕过点击外的android对话框
- postgresql - 强制转换为无效语法的整数数组
- asp.net-core - 如何确保只有一个 IHostedService 实例在 .NET core 2.2 Web API 中运行
- c++ - C++ API:修改内部对象
- sql - SQL Graph 最短路径示例
- c# - 如何在 MVVM 中的 UserControl 之间进行通信 - WPF 应用程序
- css - 使用 Flex 的自定义卡片组件
- push - msg="append failed" err="\"INVALID\" 不是有效的开始令牌"