R中的插入排序算法

insertion sort algorithm in R

我是编程新手,我正在尝试学习算法并在 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))

my code run without any error but the output of my function is not true

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

1) 名称中有错别字,您的意思可能是 insertionsort_function(这是不必要的冗长——为什么不只是 insertionsort?)

2) 你什么都returning。如果您想 return 原始数组的排序副本,请将 A 本身作为函数的最后一行。 R return 是函数定义中的最后一个表达式。

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 环境中编程的基础知识。