R中的插入排序算法

时间:2016-11-21 13:59:20

标签: r algorithm insertion-sort

我是编程新手,我正在尝试学习算法并在R中实现它们。这是我尝试插入排序:

# insertion sort algorithm 
inserionsort_function <- function(A){
  for (j in 2:length(A)) {
    key = A[j] 
    # insert A[j] into sorted sequence A[1,...,j-1] 
    i = j - 1 
    while (i > 0 & A[j] > key) {
      A[(i + 1)] = A[i]
      i = i - 1 
    }
    A[(i + 1)] = key
  } 
} 

inserionsort_function(c(5, 2, 4, 6, 1, 3))
  

我的代码运行没有任何错误,但我的函数输出不正确

1 个答案:

答案 0 :(得分:1)

您的代码至少有4个问题,1个小问题和3个主要问题:

1)名称中有一个拼写错误,你可能意味着insertionsort_function(这是不必要的冗长 - 为什么不只是insertionsort?)

2)你没有返回任何东西。如果要返回原始数组的已排序副本,请将A本身作为该函数的最后一行。 R返回函数定义中的最后一个表达式。

3)A[j] > key应为A[i] > key

4)&(用于向量)应替换为&&(用于逻辑条件)。

进行这些更改会产生:

insertionsort_function <- function(A){
  for (j in 2:length(A)) {
    key = A[j] 
    # insert A[j] into sorted sequence A[1,...,j-1] 
    i = j - 1 
    while (i > 0 && A[i] > key) {
      A[(i + 1)] = A[i]
      i = i - 1 
    }
    A[(i + 1)] = key
  }
  A
} 

例如,

> insertionsort_function(c(5, 2, 4, 6, 1, 3))
[1] 1 2 3 4 5 6

我不相信R是学习编程绝对基础知识的好语言。如果你想在R中专门学习编程,我会推荐一本明确使用R来教授编程的书。例如,我发现这本书Hands-On Programming with R是一个很好的起点。这是一个快速阅读,讲授R语境中的编程基础。