📅  最后修改于: 2023-12-03 15:19:52.357000             🧑  作者: Mango
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 中的实现。在选择排序算法时,要根据具体情况选择适合的算法以提高效率。