矩阵排序&;转置swift4

矩阵排序&;转置swift4,swift,sorting,transpose,Swift,Sorting,Transpose,给我一个二维整数数组作为参数,我应该取它并排序。但是排序应该手动完成。排序后,需要对排序后的数组进行转置,并返回转置后的数组 Input:[[3, 7, 9],[8, 6, 2],[1, 5, 4]] Return value:[[1, 4, 7],[2, 5, 8],[3, 6, 9]] func sortAndTranspose(matrix: [[Int]]) -> [[Int]] { var isSwapped = true while isSwapped ==

给我一个二维整数数组作为参数,我应该取它并排序。但是排序应该手动完成。排序后,需要对排序后的数组进行转置,并返回转置后的数组

Input:[[3, 7, 9],[8, 6, 2],[1, 5, 4]]
Return value:[[1, 4, 7],[2, 5, 8],[3, 6, 9]]

func sortAndTranspose(matrix: [[Int]]) -> [[Int]] {
    var isSwapped = true
    while isSwapped == true {
        isSwapped = false
        for index in 1..<matrix.count {
            if matrix[index] < matrix[index - 1] { 
            }
        }
    }
}
输入:[[3,7,9],[8,6,2],[1,5,4]]
返回值:[[1,4,7],[2,5,8],[3,6,9]]
函数排序转置(矩阵:[[Int]])->[[Int]]{
var Isswaped=true
而isswaped==true{
Isswaped=错误

对于1中的索引,这里是我的解决方案。我使用
flatMap
将矩阵转换为一个数组,然后使用找到的代码对数组进行排序。完成后,我将数组分割为一个矩阵

更新版使我们成为
swapAt
的一员,并支持多种方形格式。感谢@Rob的帮助

func sortAndTranspose(matrix: [[Int]]) -> [[Int]] {
    var array = matrix.flatMap({ $0 }) //create single row array

    //manual sorting
    for i in stride(from: array.count-1, to: 0, by: -1) {
        for j in 1...i {
            if array[j-1] > array[j] {
                array.swapAt(j, j - 1)
            }
        }
    }

    //transpose sorted array back into 2D array
    var result = [[Int]]()
    let count = matrix[0].count

    for i in 0..<array.count {
        if (i < count) {
            result.append([array[i]])
        } else {
            result[i % count].append(array[i])
    }
}
func排序转置(矩阵:[[Int]])->[[Int]]{
var array=matrix.flatMap({$0})//创建单行数组
//人工分拣
对于步幅中的i(从:array.count-1到:0,由:-1){
对于j在1…i{
如果数组[j-1]>数组[j]{
数组.swapAt(j,j-1)
}
}
}
//将排序后的数组转换回2D数组
变量结果=[[Int]]()
让计数=矩阵[0]。计数
对于0中的i..[[Int]]{
var array=matrix.flatMap({$0})//创建单行数组
//人工分拣
对于步幅中的i(从:array.count-1到:0,由:-1){
对于j在1…i{
如果数组[j-1]>数组[j]{
设tmp=array[j-1]
数组[j-1]=数组[j]
数组[j]=tmp
}
}
}
//将排序后的数组转换回2D数组
变量结果=[[Int]]()
让count=matrix.count

对于0中的i.。什么意思排序应该手动完成?@JoakimDanielson我想OP是说它应该在不使用
sort
/
sorted
方法的情况下进行排序…嗯,让你怀疑是否允许使用更高阶的函数。我只是在尝试找到解决方案,如果有人有想法,请告诉我!禁止使用扩展、导入、,全局变量和带有函数的访问标识符!为什么要将这两个完全不相关的(排序、转置)结合起来将操作转换为一个函数?@Rob我本来打算这么做,但当我用3x2矩阵测试它时,它工作得很好。编辑它对3x2工作得很好,但不是2x3,我会研究它。@Alexander,因为我得到的印象是OP想要一个函数,但我确实想到了这个想法。@Rob感谢建设性的批评,有时你会学到一个lo通过回答问题!JoakimDanielson Well answering是你质疑OP的假设并向他们传授新事物的机会!
func sortAndTranspose(matrix: [[Int]]) -> [[Int]] {
    var array = matrix.flatMap({ $0 }) //create single row array

    //manual sorting
    for i in stride(from: array.count-1, to: 0, by: -1) {
        for j in 1...i {
            if array[j-1] > array[j] {
                let tmp = array[j-1]
                array[j-1] = array[j]
                array[j] = tmp
            }
        }
    }

    //transpose sorted array back into 2D array
    var result = [[Int]]()
    let count = matrix.count

    for i in 0..<array.count {
        if (i < count) {
            result.append([array[i]])
        } else {
            result[i % count].append(array[i])
    }
}