您的位置:首页 > 编程语言 > Ruby

Ruby学习之路——编程实践【3】 排序——快速排序

2012-06-04 18:13 465 查看
编程实现【3】 2012-06-04

  实现快速排序

arrInt = [23, 2, 56, 89, 12, 45]

def swap(arrInt, m, n)
temp = arrInt[m]
arrInt[m] = arrInt

arrInt
= temp
end

def quickSort(arrInt, low, high)
middle = 0
if low < high
middle = partition(arrInt, low, high)
quickSort(arrInt, low, middle -1)
quickSort(arrInt, middle + 1, high)
end
end

def partition(arrInt, low, high)
middle = low
middleValue = arrInt[low]
#  (low + 1).upto(high) do |i|
#  ((low + 1)..high).each do |i|
#  (low + 1).step(high, 1) do |i|
for i in (low + 1)..high
if arrInt[i] < middleValue then
middle = middle + 1
swap(arrInt, middle, i)
end
end
swap(arrInt, low, middle)
return middle
end

quickSort(arrInt, 0, arrInt.length - 1)
p arrInt

 

续:简化快速排序算法如下

#begin
def quickSort(arrInt, low = 0, high = arrInt.length - 1)
if low < high then
middle = partition(arrInt, low, high)
quickSort(arrInt, low, middle - 1)
quickSort(arrInt, middle + 1, high)
end
end

def partition(arrInt, low, high)
middle = low
middleValue = arrInt[low]
(low + 1).upto(high) do |i|
if arrInt[i] < middleValue then
middle += 1
arrInt[i], arrInt[middle] = arrInt[middle], arrInt[i]
end
end
arrInt[low], arrInt[middle] = arrInt[middle], arrInt[low]
return middle
end
#end
#test
a = Array.new
0.upto(1000) {|i| a[a.length] = (Random.new.rand*10**2).to_i }
quickSort(a)
p a


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程 ruby 算法