编程实现【3】 2012-06-04
实现快速排序
arrInt = [23, 2, 56, 89, 12, 45]
def swap(arrInt, m, n)
temp = arrInt[m]
arrInt[m] = arrInt[n]
arrInt[n] = 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