📜  R 编程中的数组排序(1)

📅  最后修改于: 2023-12-03 14:46:53             🧑  作者: Mango

R编程中的数组排序

在R编程中,排序是一个非常常见的操作。R提供了多种排序算法和排序函数来方便我们处理各种数据类型的排序需求。在本文中,我们会介绍数组排序的相关知识,包括排序算法、排序函数以及对应的示例代码。

排序算法

R中提供了多种排序算法,包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。这些算法可以对字符向量、数值向量、因子向量和矩阵等数据类型进行排序。下面我们将逐一介绍这些算法。

冒泡排序

冒泡排序是最简单的排序算法之一,它的基本思想是两两比较相邻元素的大小,按照升序或降序进行交换,直到所有元素都排序完成。代码如下:

bubble_sort <- function(x) {
  for (i in 1:(length(x)-1)) {
    for (j in 1:(length(x)-i)) {
      if (x[j] > x[j+1]) {
        temp <- x[j+1]
        x[j+1] <- x[j]
        x[j] <- temp
      }
    }
  }
  return(x)
}
选择排序

选择排序的基本思想是每次从未排序的元素中选取最小或最大值,置于已排序序列的末尾。代码如下:

selection_sort <- function(x) {
  for (i in 1:length(x)) {
    min <- i
    for (j in (i+1):length(x)) {
      if (x[j] < x[min]) {
        min <- j
      }
    }
    temp <- x[i]
    x[i] <- x[min]
    x[min] <- temp
  }
  return(x)
}
插入排序

插入排序的基本思想是每次取出未排序中的第一个元素,插入已排序序列中合适的位置,使得插入后的序列仍有序。代码如下:

insertion_sort <- function(x) {
  for (i in 2:length(x)) {
    j <- i
    while (j > 1 && x[j] < x[j-1]) {
      temp <- x[j-1]
      x[j-1] <- x[j]
      x[j] <- temp
      j <- j-1
    }
  }
  return(x)
}
快速排序

快速排序是一种基于分治策略的排序算法,其基本思想是选择一个基准元素,将所有小于该元素的值移到它的左边,将所有大于它的值移到右边,然后再分别对左右两侧进行递归排序。代码如下:

quick_sort <- function(x) {
  if (length(x) <= 1) {
    return(x)
  } else {
    pivot <- x[1]
    left <- x[x < pivot]
    right <- x[x > pivot]
    return(c(quick_sort(left), pivot, quick_sort(right)))
  }
}
归并排序

归并排序是一种基于分治策略的排序算法,其基本思想是将待排序序列分成若干个子序列,对每个子序列进行排序,然后将子序列合并成一个有序序列。代码如下:

merge_sort <- function(x) {
  if (length(x) <= 1) {
    return(x)
  } else {
    mid <- ceiling(length(x)/2)
    left <- merge_sort(x[1:mid])
    right <- merge_sort(x[(mid+1):length(x)])
    i <- 1
    j <- 1
    k <- 1
    while (i <= length(left) && j <= length(right)) {
      if (left[i] <= right[j]) {
        x[k] <- left[i]
        i <- i+1
      } else {
        x[k] <- right[j]
        j <- j+1
      }
      k <- k+1
    }
    if (i > length(left)) {
      x[k:length(x)] <- right[j:length(right)]
    } else {
      x[k:length(x)] <- left[i:length(left)]
    }
    return(x)
  }
}
排序函数

R提供了多个排序函数,包括sort()、order()和rank()。这些函数的用法相当简单,下面我们将逐一介绍。

sort()

sort()函数用于对向量进行升序或降序排序,返回按照排序顺序排列的向量。sort()函数有两个主要参数:x表示要排序的向量,decreasing表示是否按照降序排序。下面是一个示例代码:

x <- c(2, 4, 1, 5, 3)
sorted_x <- sort(x)
print(sorted_x)   # [1] 1 2 3 4 5
rev_sorted_x <- sort(x, decreasing = TRUE)
print(rev_sorted_x)   # [1] 5 4 3 2 1
order()

order()函数用于获取向量排序的下标,返回按照排序顺序排列的向量下标。order()函数有两个主要参数:x表示要排序的向量,decreasing表示是否按照降序排序。下面是一个示例代码:

x <- c(2, 4, 1, 5, 3)
idx <- order(x)
print(idx)   # [1] 3 1 5 2 4
rev_idx <- order(x, decreasing = TRUE)
print(rev_idx)   # [1] 4 2 5 1 3
rank()

rank()函数用于对向量进行排名,返回按照排名顺序排列的向量。rank()函数有三个主要参数:x表示要排序的向量,ties.method表示对于相同的值,采取的排名方法,na.last表示是否把NA值排在最后。下面是一个示例代码:

x <- c(2, 2, 1, 5, 4)
ranked_x <- rank(x)
print(ranked_x)   # [1] 3.5 3.5 1.0 5.0 4.0
示例代码

下面是一些示例代码来演示数组排序的基本操作。

# 冒泡排序示例
x <- c(2, 4, 1, 5, 3)
sorted_x <- bubble_sort(x)
print(sorted_x)   # [1] 1 2 3 4 5

# 选择排序示例
x <- c(2, 4, 1, 5, 3)
sorted_x <- selection_sort(x)
print(sorted_x)   # [1] 1 2 3 4 5

# 插入排序示例
x <- c(2, 4, 1, 5, 3)
sorted_x <- insertion_sort(x)
print(sorted_x)   # [1] 1 2 3 4 5

# 快速排序示例
x <- c(2, 4, 1, 5, 3)
sorted_x <- quick_sort(x)
print(sorted_x)   # [1] 1 2 3 4 5

# 归并排序示例
x <- c(2, 4, 1, 5, 3)
sorted_x <- merge_sort(x)
print(sorted_x)   # [1] 1 2 3 4 5

# sort()函数示例
x <- c(2, 4, 1, 5, 3)
sorted_x <- sort(x)
print(sorted_x)   # [1] 1 2 3 4 5
rev_sorted_x <- sort(x, decreasing = TRUE)
print(rev_sorted_x)   # [1] 5 4 3 2 1

# order()函数示例
x <- c(2, 4, 1, 5, 3)
idx <- order(x)
print(idx)   # [1] 3 1 5 2 4
rev_idx <- order(x, decreasing = TRUE)
print(rev_idx)   # [1] 4 2 5 1 3

# rank()函数示例
x <- c(2, 2, 1, 5, 4)
ranked_x <- rank(x)
print(ranked_x)   # [1] 3.5 3.5 1.0 5.0 4.0

以上就是R编程中的数组排序相关知识的介绍,希望对广大程序员有所帮助。