• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >ruby > Ruby实现的各种排序算法

Ruby实现的各种排序算法

作者:junjie 字体:[增加 减小] 来源:互联网

junjie 通过本文主要向大家介绍了ruby,ruby rose,ruby什么意思,max and ruby,ruby语言等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

时间复杂度:Θ(n^2)

Bubble sort
def bubble_sort(a) 
  (a.size-2).downto(0) do |i| 
    (0..i).each do |j| 
      a[j], a[j+1] = a[j+1], a[j] if a[j] > a[j+1] 
    end 
  end 
  return a 
end
</div>

Selection sort
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
</div>

Insertion sort
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 
</div>

 Shell sort
  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
</div>
时间复杂度:Θ(n*logn)

Merge sort
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 
</div>

Heap sort
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 
</div>

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

时间复杂度:Θ(n)

Counting sort
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 
</div>

Radix sort
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| 
 

您可能想查找下面的文章:

  • ruby迭代map的简洁写法实现原理分析
  • Ruby中访问SQL Server数据库的配置实例
  • ruby声明式语法的实现例子
  • Ruby中的Range对象学习笔记
  • Ruby中的String对象学习笔记
  • Ruby的基本语法学习总结
  • Ruby中的方法(函数)学习总结
  • Ruby中的变量学习总结
  • Ruby数组(Array)学习笔记
  • Ruby和元编程之万物皆为对象

相关文章

  • 简要解读Ruby面向对象编程中的作用域
  • Ruby的运算符和语句优先级介绍
  • Ruby on Rails实现最基本的用户注册和登录功能的教程
  • Ruby学习笔记之gem 命令详解
  • Rails Routes中new、collection、member的区别浅析
  • Ruby中关于模块的一些基础知识
  • Ruby入门介绍第1/5页
  • Ruby On Rails中如何避免N+1问题
  • 浅析Ruby的源代码布局及其编程风格
  • rails上传图片代码实例

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Ruby中的方法(函数)学习总结
    • Ruby实现网页图片抓取
    • Ruby学习笔记二帮助生成Vim添加代码头的代码
    • ruby元编程之method_missing的一个使用细节
    • Ruby on Rails中Rack中间件的基础学习教程
    • Ruby中检测Gem是否安装的方法
    • Windows下ruby语言安装教程
    • ruby实现石头剪刀布游戏示例
    • Ruby的字符串与数组求最大值的相关问题讨论
    • ruby实现网页图片抓取

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有