Bilgisayar alanında okuyan her öğrenci, bir kere bile olsa; sıralama algoritmalarıyla uğraşmanın, bazen ne kadar vahim bir hal aldığını bilir.
Özellikle vize/finalde, türlü türlü sıralama algoritmasını performansına, zamanına, türlü kriterine göre sıralamaya çalışmak, bir yandan kodlamayı akla getirmek vs.vs… Pek de keyifli bir iş değil aslında; en son 2 sene önce C finalinde sadece Selection Sort için bir sayfa kod yazan bir insan olarak, aşağıdaki Ruby kodlarını sunmaktan gurur duyuyorum efem
Selection Sort:
a = [1,5,54,1,543,5,431,541,54,5,43]
def sort(array)
def min(array, from)
min_val = array[from..-1].min
min_idx = array[from..-1].index(min_val) + from
return min_idx
end
array.each_with_index { |v, i|
min_idx = min(array, i)
tmp = array[i]
array[i] = array[min_idx]
array[min_idx] = tmp
}
array
end
p sort(a)
Quick Sort:
a = [60,5,54,1,543,5,431,541,54,5,43]
def sort(f, array)
return [] if array.empty?
pivot = array[0]
before = sort(f, array[1..-1].delete_if { |x| not f.call(x, pivot) })
after = sort(f, array[1..-1].delete_if { |x| f.call(x, pivot) })
return (before << pivot).concat(after)
end
p sort(Proc.new { |x, pivot| x < pivot }, a)
Bubble Sort:
a = [1,5,54,1,543,5,431,541,54,5,43]
def sort(array)
i = 0
while (i < array.size)
j = array.size - 1
while (i < j)
if array[j] < array[j - 1]
tmp = array[j]
array[j] = array[j - 1]
array[j - 1] = tmp
end
j -= 1
end
i += 1
end
return array
end
p sort(a)
Diğer algoritmalar için buraya bakabilirsiniz.
Bu Yazıyı Paylaşın