У меня проблема с выбором сортировки в Swift

Я пытаюсь создать простую сортировку выбора в Swift . Я сделал это без проблем в C , но на этот раз я страдаю. Кто-нибудь знает, что не так с моим кодом?

var arrayOne: [Int] = [5, 12, 69, 33, 14, 15, 22, 88, 3, 4]

var temp = 0, index = 0
var i = 0, j = 0
var min = 9999

while i < 10 {

    j = i
    while j < 10 {

        if (min > arrayOne[Int(j)]){

            min = arrayOne[Int(j)]
            index = j
        }

        j += 1

    }

    temp = arrayOne[Int(i)]
    arrayOne[Int(i)] = arrayOne[index]
    arrayOne[index] = temp

    i += 1
}

for n in arrayOne {
    print(n)
}

Результат

3
5
12
69
33
14
15
22
4
88

Всего 1 ответ


Вам нужно каждый раз сбрасывать min через внешний цикл while, чтобы вы выбрали следующее значение min :

while i < 10 {
    min = .max  // add this

Примечания:

  • .max - это сокращение от Int.max . Swift выводит тип из того факта, что max объявлено как Int .
  • Вы можете переместить объявление min в цикл с помощью var min = Int.max так как min не требуется после цикла. В этом случае Int необходим для установления типа. Его также можно записать как var min: Int = .max .
  • Int.max является лучшим выбором, чем 9999 потому что он корректно работает с большими числами (например, 10000 ) и лучше передает цель алгоритма.

Есть идеи?

10000