ruby 快速排序、合并排序

 def qsort(list)
  return [] if list.size == 0
  x, *xs = *list
  less, more = xs.partition{|y| y < x}
  qsort(less) + [x] + qsort(more)
 end

 def qs(l)
  return [] if (x,*xs=l).empty?
  less, more = xs.partition{|y| y < x}
  qs(less) + [x] + qs(more)
 end

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

   
   
合并排序
def merge_sort ( a )
return a if a . size <= 1
l , r = split_array ( a )
result = combine ( merge_sort ( l ), merge_sort ( r ))
end
 
def split_array a
mid = ( a . size / 2 ) . round
[ a . take ( mid ), a . drop ( mid ) ]
end
 
def combine a , b
return b . empty? ? a : b if a . empty? || b . empty?
smallest = a . first <= b . first ? a . shift : b . shift
combine ( a , b ) . unshift ( smallest )
end
 
a = [ 6 , 23 , 53 , 1 , 2 , 5 , 62 , 61 , 33 , 21 , 14 , 6 , 23 ]. shuffle
p merge_sort ( a ) # p x <=> puts x.inspect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值