2015-07-04 256 views
1

我对Swift很陌生,我想知道我应该如何修改中包含的Int?我让它像我在Java中那样做,但它显然不起作用:我得到一个Cannot assign to immutable value of type 'Int'编译错误。Swift修改Int数组的InsertionSort算法

这里是我的代码:

import Foundation 

func createRandomArray(length: Int) -> [Int]{ 
    var random = [Int]() 
    for index in 0...length{ 
     random.append(Int(arc4random_uniform(100))) 
    } 
    return random 
} 

func insertionSort(toSort: [Int]) -> [Int]{ 
    var length = toSort.count 
    for index in 1...length-1{ 
     var key = toSort[index] 
     var previous = index-1 
     while(previous>0 && toSort[previous]>key){ 
      // ERROR IS THERE 
      toSort[previous+1] = toSort[previous] 
      previous-- 
     } 
    } 
    return toSort 
} 

var array = createRandomArray(10) 

print(array) 

print(insertionSort(array)) 

我认为使用的var代替let会给可变对象所以这就是为什么我有点失落。

感谢您的帮助

编辑:

我得到这个工作的答案,由于@vacawama:

import Foundation 

func createRandomArray(length: Int) -> [Int]{ 
    var random = [Int]() 
    for index in 0...length{ 
     random.append(Int(arc4random_uniform(100))) 
    } 
    return random 
} 

func insertionSort(var toSort: [Int]) -> [Int]{ 
    for firstIterator in 1...toSort.count-1{ 
     var currentValue = toSort[firstIterator] 
     var previousPosition = firstIterator-1 
     while(previousPosition>=0 && toSort[previousPosition]>currentValue){ 
      swap(&toSort[previousPosition+1], &toSort[previousPosition]) 
      previousPosition-- 
     } 
    } 
    return toSort 
} 


var array = createRandomArray(10) 

print(array) 

print(insertionSort(array)) 

回答

1

默认情况下,阵列参数是被调用的函数内不可改变。如果要修改传递到insertionSort的阵列的副本,请在函数标头中的toSort之前添加var

func insertionSort(var toSort: [Int]) -> [Int]{ 
+0

非常酷!它像一个魅力! –

0

我用swift玩了下面的内容3.希望它能帮助一些来这里的人。

import Cocoa 

func ints(cnt: Int, ceiling: Int) -> [Int] { 
    var arr = [Int]() 
    for _ in 0 ..< cnt { 
     arr.append(Int(arc4random_uniform(UInt32(ceiling)))) 
    } 
    return arr 
} 

func insertion(arr: inout [Int]) { 
    for i in 1..<arr.count { 
     var j = i 
     let x = arr[i] 
     while j > 0 && arr[j - 1] > x { 
      arr[j] = arr[j - 1] 
      j -= 1 
     } 
     arr[j] = x 
    } 
} 

let a = ints(cnt: 10, ceiling: 100) 
print(a) 

var b = a 
insertion(arr: &b) 
print(b) 

输出:

[13, 30, 68, 19, 1, 4, 28, 65, 96, 13] 
[1, 4, 13, 13, 19, 28, 30, 65, 68, 96] 

为了便于比较,这里是一个implementaion在Java:

void insertionSort(int[] arr) { 
    for(int i = 1; i < arr.length; i++) { 
     int x = arr[i]; 
     int j = i; 
     while(j > 0 && arr[j - 1] > x) { 
      arr[j] = arr[j - 1]; 
      j--; 
     } 
     arr[j] = x; 
    } 
}