首页 > 解决方案 > 如何在不使用 .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次)有人可以帮我吗?

标签: swiftsorting

解决方案


这是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.


推荐阅读