Ruby的归并排序

ruby 代码 [sort.rb]
 
  1. #!/usr/bin/env ruby  
  2. class Sort  
  3.   def putList(l)  
  4.     a = []  
  5.     a = l  
  6.     b = "["  
  7.     a.each do |aa|  
  8.       b += (aa.to_s + ",")  
  9.     end  
  10.     b += "]"  
  11.     b.gsub!(/,\]/,']')  
  12.     puts b  
  13.   end  
  14. end 
ruby 代码 [MergerSort.rb]
 
  1. #!/usr/bin/env ruby  
  2. require 'Sort'  
  3.   
  4. class MergerSort < Sort  
  5.   @list = []  
  6.   def sort(l)  
  7.     @list = l  
  8.     mergeSort(@list,0,@list.length - 1)  
  9.     putList @list  
  10.   end  
  11.   def merge(a,p,q,r)  
  12.     list_L = a[p,q-p+1]  
  13.     list_R = a[q+1,r-q+1]  
  14.       
  15.     list_L[q-p+1] = "eof"  
  16.     list_R[r-q] = "eof"  
  17.       
  18.     i = 0  
  19.     j = 0  
  20.       
  21.     until i + j > r-p  
  22.       if list_L[i] != "eof" && ( list_R[j] == "eof" || list_L[i] < list_R[j])  
  23.         a[p+i+j] = list_L[i]  
  24.         i += 1  
  25.       elsif list_R[j] != "eof"  
  26.         a[p+i+j] = list_R[j]  
  27.         j += 1  
  28.       end  
  29.     end  
  30.   end  
  31.     
  32.   def mergeSort(a,p,r)  
  33.     if p < r  
  34.       q = (p + r) / 2  
  35.       mergeSort(a,p,q)  
  36.       mergeSort(a,q+1,r)  
  37.       merge(a,p,q,r)  
  38.     end  
  39.   end  
  40. end  
  41.   
  42. ms = MergerSort.new  
  43. #a = [2,4,3,1,2.5,0,6,100,24,64,18,72,100,88,99,88]  
  44. a = []  
  45. 1000.times do  
  46.   a << rand(1000)  
  47. end  
  48. t1 = Time.new  
  49. ms.sort(a)  
  50. t2 = Time.new  
  51. puts "%.6f" % (t2.to_f - t1.to_f)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值