快速排序的思想:
一列无序的数字,随机挑选一个作为标杆,根据标杆,把数列整理成两部分,左边小于等于,右边大于标杆
然后分别对这两个小数列应用同样的“挑选标杆,分成两部分”,直到每个小数列只有最多一个元素,那么整个数列有序。
要求:
只能使用一个变量来作为额外的空间,不能另建数组。
比较着急,希望大神帮帮忙。
def quicksort(list)
return list if list.size <= 1
pivot = list.sample
left, right = list.partition { |e| e < pivot }
quicksort(left) + quicksort(right)
end
def f(a)
(x=a.pop)? f(a.select{|i| i <= x}) + [x] + f(a.select{|i| i > x}) : []
end
只有写 C 代码时,针对元素数目不多的特定数组实现插入排序,才会比标准库的快排快一些,其他语言写排序都没意义。
尽管如此,按照楼主要求,使用一个变量
作为额外的空间,对数组
进行快速排序的 ruby 代码如下
一个变量 = nil
数组.sort!
#31 楼 @blacktulip 那是 C 里用的,而且编译器会优化掉一些我们不用管,要求是用 Ruby 实现...