📜  ruby 排列 (1)

📅  最后修改于: 2023-12-03 15:19:52.357000             🧑  作者: Mango

Ruby 排列

Ruby 是一种简单易学的脚本语言,也是一种面向对象的编程语言,它具有易读的语法和强大的功能。在 Ruby 中,我们可以使用不同的排序算法对数组进行排序。本文将为你介绍常见的排序算法及其在 Ruby 中的实现。

冒泡排序

冒泡排序是一种重复比较相邻两个元素并交换位置的排序算法。它的时间复杂度为 O(n^2)。在 Ruby 中,可以使用以下代码实现冒泡排序:

def bubble_sort(arr)
  n = arr.length - 1
  n.times do
    for i in 0..n-1 do
      if arr[i] > arr[i + 1]
        arr[i], arr[i + 1] = arr[i + 1], arr[i]
      end
    end
  end
  arr
end

arr = [3, 5, 2, 1, 4]
p bubble_sort(arr) #=> [1, 2, 3, 4, 5]
选择排序

选择排序是一种每次找到最小值并交换位置的排序算法。它的时间复杂度为 O(n^2)。在 Ruby 中,可以使用以下代码实现选择排序:

def selection_sort(arr)
  n = arr.length
  (n-1).times do |i|
    min_index = i
    (i+1...n).each do |j|
      min_index = j if arr[j] < arr[min_index]
    end
    arr[i], arr[min_index] = arr[min_index], arr[i] if min_index != i
  end
  arr
end

arr = [3, 5, 2, 1, 4]
p selection_sort(arr) #=> [1, 2, 3, 4, 5]
插入排序

插入排序是一种将未排序的元素一个个插入有序序列中的排序算法。它的时间复杂度为 O(n^2)。在 Ruby 中,可以使用以下代码实现插入排序:

def insertion_sort(arr)
  n = arr.length
  (1...n).each do |i|
    k = arr[i]
    j = i - 1
    while j >= 0 && arr[j] > k
      arr[j + 1] = arr[j]
      j -= 1
    end
    arr[j + 1] = k
  end
  arr
end

arr = [3, 5, 2, 1, 4]
p insertion_sort(arr) #=> [1, 2, 3, 4, 5]
快速排序

快速排序是一种分治的排序算法,通过选择一个基准值,将数组分成左右两个子数组再分别排序,最终实现排序。它的时间复杂度为 O(n*log(n))。在 Ruby 中,可以使用以下代码实现快速排序:

def quick_sort(arr)
  return arr if arr.size <= 1
  pivot = arr.sample
  left, right = arr.partition { |x| x < pivot }
  quick_sort(left) + quick_sort(right)
end

arr = [3, 5, 2, 1, 4]
p quick_sort(arr) #=> [1, 2, 3, 4, 5]
归并排序

归并排序是一种分治的排序算法,通过将数组分成左右两个子数组分别排序后再合并,最终实现排序。它的时间复杂度为 O(n*log(n))。在 Ruby 中,可以使用以下代码实现归并排序:

def merge_sort(arr)
  return arr if arr.size <= 1
  mid = arr.size / 2
  left = arr[0, mid]
  right = arr[mid, arr.size - mid]
  merge(merge_sort(left), merge_sort(right))
end

def merge(left, right)
  result = []
  until left.empty? || right.empty?
    if left.first <= right.first
      result << left.shift
    else
      result << right.shift
    end
  end
  result + left + right
end

arr = [3, 5, 2, 1, 4]
p merge_sort(arr) #=> [1, 2, 3, 4, 5]

以上就是常见的几种排序算法在 Ruby 中的实现。在选择排序算法时,要根据具体情况选择适合的算法以提高效率。