Сортировка методом грубой силы

Я пытаюсь написать код R, чтобы выполнить сортировку выбора грубой силы. Но я не знаю, как написать часть min‹-i и min‹-j.

example <- function(x)

{

  for (i in 1:(length(x)-1))

  {

    #min <- i

    for (j in (i+1):(length(x)))

    {

      if (x[j] < x[(which.min(x))])

      {

        #min <- j

      }

    temp <- x[which.min(x)]

    x[which.min(x)] <- x[i]

    x[i] <- temp

    }

  }

  x

}

x <-sample(1:100,10)

example(x)

Может ли кто-нибудь помочь мне закончить часть «#»?

Я также прикрепил псевдокод введите здесь описание изображения


person Andy    schedule 18.03.2016    source источник


Ответы (1)


min — это индекс следующего минимального элемента. Таким образом, это то же самое, что использовать which.min без внутреннего цикла.

example <- function(x) {
  for (i in 1:(length(x)-1)) {
    mindex <- i  # or, mindex <- which.min(x[(i+1):length(x)]) and remove the next loop

    for (j in (i+1):(length(x))) {
      if (x[j] < x[mindex]) 
        mindex <- j
    }

    ## swap
    temp <- x[i]
    x[i] <- x[mindex]
    x[mindex] <- temp
  }
  x
}
person Rorschach    schedule 18.03.2016