`
shaorui23
  • 浏览: 22237 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Ruby排序算法

 
阅读更多
1.冒泡排序

百科:http://baike.baidu.com/view/254413.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F

def bubble_sort(arr)
1.upto(arr.length-1) do |i|
(arr.length-i).times do |j|
if arr[j]>arr[j+1]
arr[j],arr[j+1] = arr[j+1],arr[j]
end
end
end
arr
end

array = [2.3,1.3,15.02,25.02,45,85.14,56.1,35.2,4.2,15.4]
puts bubble_sort(array)


2.漢諾塔
百科:http://baike.baidu.com/view/191666.html?wtp=tt
Wiki: http://zh.wikipedia.org/zh-tw/%E6%B1%89%E8%AF%BA%E5%A1%94

def move(from,to)
puts "#{from} move to #{to}"
end

def hanoi(n,first,second,third)
if n==1
move(first,third)
else
hanoi(n-1,first,third,second)
move(first,third)
hanoi(n-1,second,first,third)
end
end

hanoi(6,"A","B","C")


3.插入排序
百科:http://baike.baidu.com/view/396887.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F

def insertion_sort(a)  
a.each_with_index do |el,i|
j = i - 1
while j >= 0
break if a[j] <= el
a[j + 1] = a[j]
j -= 1
end
a[j + 1] = el
end
return a
end


4.選擇排序
百科:http://baike.baidu.com/view/547263.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F

def selection_sort(a)
b = []
a.size.times do |i|
min = a.min
b << min
a.delete_at(a.index(min))
end
return b
end


5.Shell排序
百科:http://baike.baidu.com/view/549624.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F

def shell_sort(a)
gap = a.size
while(gap > 1)
gap = gap / 2
(gap..a.size-1).each do |i|
j = i
while(j > 0)
a[j], a[j-gap] = a[j-gap], a[j] if a[j] <= a[j-gap]
j = j - gap
end
end
end
return a
end


6.合并排序
百科:http://baike.baidu.com/view/3668564.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E5%90%88%E4%BD%B5%E6%8E%92%E5%BA%8F

def merge(l, r)
result = []
while l.size > 0 and r.size > 0 do
if l.first < r.first
result << l.shift
else
result << r.shift
end
end
if l.size > 0
result += l
end
if r.size > 0
result += r
end
return result
end

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


7.堆排序
百科:http://baike.baidu.com/view/157305.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E5%A0%86%E6%8E%92%E5%BA%8F

def heapify(a, idx, size)
left_idx = 2 * idx + 1
right_idx = 2 * idx + 2
bigger_idx = idx
bigger_idx = left_idx if left_idx < size && a[left_idx] > a[idx]
bigger_idx = right_idx if right_idx < size && a[right_idx] > a[bigger_idx]
if bigger_idx != idx
a[idx], a[bigger_idx] = a[bigger_idx], a[idx]
heapify(a, bigger_idx, size)
end
end

def build_heap(a)
last_parent_idx = a.length / 2 - 1
i = last_parent_idx
while i >= 0
heapify(a, i, a.size)
i = i - 1
end
end

def heap_sort(a)
return a if a.size <= 1
size = a.size
build_heap(a)
while size > 0
a[0], a[size-1] = a[size-1], a[0]
size = size - 1
heapify(a, 0, size)
end
return a
end


8.快速排序
百科:http://baike.baidu.com/view/115472.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F

def quick_sort(a)
(x=a.pop) ? quick_sort(a.select{|i| i <= x}) + [x] + quick_sort(a.select{|i| i > x}) : []
end


9.計數排序
百科:http://baike.baidu.com/view/1209480.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E8%AE%A1%E6%95%B0%E6%8E%92%E5%BA%8F

def counting_sort(a)
min = a.min
max = a.max
counts = Array.new(max-min+1, 0)

a.each do |n|
counts[n-min] += 1
end

(0...counts.size).map{|i| [i+min]*counts[i]}.flatten
end


10.基數排序
百科:http://baike.baidu.com/view/1170573.html?wtp=tt
Wiki:http://zh.wikipedia.org/zh-tw/%E5%9F%BA%E6%95%B0%E6%8E%92%E5%BA%8F

def kth_digit(n, i)
while(i > 1)
n = n / 10
i = i - 1
end
n % 10
end

def radix_sort(a)
max = a.max
d = Math.log10(max).floor + 1

(1..d).each do |i|
tmp = []
(0..9).each do |j|
tmp[j] = []
end

a.each do |n|
kth = kth_digit(n, i)
tmp[kth] << n
end
a = tmp.flatten
end
return a
end
分享到:
评论

相关推荐

    ruby排序算法

    以上就是标题“ruby排序算法”中所涵盖的几种排序算法的详细解析。每种算法都有其特定的应用场景和性能特点,例如冒泡排序适合小规模数据,而合并排序和堆排序则在处理大规模数据时表现优秀。在实际应用中,根据数据...

    ruby-使用ruby实现的排序算法-sorting.zip

    本资源"ruby-使用ruby实现的排序算法-sorting.zip"聚焦于如何使用Ruby实现不同的排序算法,这对于Ruby开发者来说是一项重要的技能。下面将详细讨论Ruby中的排序算法及其原理。 1. 内置排序方法 `sort` Ruby提供了...

    ruby-使用ruby实现的算法之冒泡排序.zip

    本资料包“ruby-使用ruby实现的算法之冒泡排序.zip”专注于讲解如何使用Ruby来实现经典的冒泡排序算法,这对于理解排序算法以及提升Ruby编程技能非常有帮助。 冒泡排序是一种基础且直观的排序算法,它通过重复遍历...

    Ruby实现的各种排序算法

    ### Ruby 实现的各种排序算法详解 #### 一、概述 在计算机科学中,排序算法是基本且重要的数据处理手段之一,被广泛应用于多种场景。不同的排序算法有着各自的特点与应用场景,选择合适的排序算法能有效提高程序...

    Ruby语言写一个冒泡排序算法.pdf

    ### Ruby语言中的冒泡排序算法 #### 知识点一:冒泡排序基本概念 - **定义**:冒泡排序是一种简单的排序算法,通过重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的...

    Ruby 类型算法集合包

    Ruby Standard Library: Ruby 的标准库中包含了一些基本的算法,比如排序算法(sort 方法)、搜索算法(find 方法)等。 RubyGems: RubyGems 是 Ruby 的包管理器,它允许你安装和使用第三方库。许多算法库可以通过 ...

    ruby写的几个小算法

    在`sort.rb`文件中,可能包含了不同的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序或者堆排序等。例如: 1. **冒泡排序**(Bubble Sort):是最简单的排序算法之一,通过不断交换相邻的未排序...

    Ruby实现的3种快速排序算法

    ### Ruby实现的三种快速排序算法 #### 一、引言 快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔(Tony Hoare)于1960年提出。其核心思想是通过一趟排序将待排记录分隔成独立的两部分,其中一部分的...

    Ruby冒泡排序的案例

    冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,也就是说该数列已经排序完成。 ##...

    sorting_algorithm:Ruby中排序算法的教学模块

    这个Ruby教学模块提供了这些排序算法的实现,有助于学习者通过实际代码加深对排序算法的理解,并可以根据不同场景选择合适的排序算法。在实践中,了解这些排序算法的时间复杂度和空间复杂度也很关键,因为这会直接...

    Ruby编程语言算法集

    在算法方面,Ruby提供了丰富的内置函数和库,如数组和哈希的操作,方便进行排序、查找、过滤等操作。比如,`Array#sort`用于对数组进行升序排序,`Enumerable#each_with_index`可以遍历集合并同时获取索引。对于搜索...

    人力资源机器(程序员升职记)的Ruby算法

    Ruby的算法库涵盖了排序、搜索、图论、密码学等多个领域,这些算法经过优化,可在实际项目中高效运行。 在Ruby社区,有许多开源项目和库可供使用,如RubyGems,它提供了大量的算法实现。此外,Ruby的文档和教程也...

    新手Ruby编程语言实现的冒泡排序算法入门demo

    冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 部分代码示例...

    Ruby算法和数据结构。C扩展_Ruby_C_下载.zip

    1. **排序算法**:如冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等,这些都是处理大量数据时的基础工具。 2. **查找算法**:例如线性查找、二分查找、哈希查找,用于在数据集中寻找特定元素。 3. *...

    基于Ruby实现pagerank算法.zip

    最后,完成Pagerank算法的实现后,我们可以将结果输出,例如按照Pagerank值排序网页,并分析排名变化以理解网页的影响力。这有助于我们了解网页的重要性,对网站优化提供指导。 总之,基于Ruby实现Pagerank算法涉及...

    Ruby实现的合并排序算法

    合并排序是一种基于分治策略的高效排序算法,它...总结起来,这个Ruby实现的合并排序算法展示了如何通过分治策略和递归来对一个数组进行排序。虽然它的空间效率相对较低,但其时间复杂度保证了在大多数情况下的高效性。

    Ruby实现插入排序算法及进阶的二路插入排序代码示例

    ### Ruby 实现插入排序算法及进阶的二路插入排序 #### 插入排序基本概念 插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。...

    一些图形算法的Ruby实现_Ruby_下载.zip

    在Ruby编程语言中,图形算法是处理图结构和网络数据的一种技术。这些算法通常用于解决各种问题,如路径查找、网络优化、社交网络分析等。在这个"一些图形算法的Ruby实现_Ruby_下载.zip"压缩包中,我们可以期待找到...

Global site tag (gtag.js) - Google Analytics