Nedir?

Pınar Yanardağ'ın Özgür Yazılım, Linux, Ruby, Pardus, ıvır zıvır günlüğü...

Ruby ile Sıralama Algoritmaları Yazmak

November 7th, 2006 by PINguAR

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.

Ruby altında kategorilenmiş |

Bu yazı toplam 1327 kere okunmuş.
Şu an 1 kişi okuyor.
Aynı anda en fazla 3 kişi okumuş.
En son 2008-10-13 08:08:04 tarihinde okunmuş.

OOOOO
Henuz Oy Yok

5 Yorum Var

  1. Anonymous Der ki:

    Bunları neden gezegenede yazmıyorsunuz?

  2. pinguar Der ki:

    Ihırm, aslında daha önce açıklamıştım bunu (bkz: önceki yorum kısımları).

    Ama, böyle “kendimi daha özgür hissettiğimi” söyleyeyim sadece ;)

  3. Anonymous Der ki:

    Gezegende bazen o kadar gereksiz yazılar olabiliyor ki bu sizinkiler gayet gerekli görünüyor. Birçok insanın okuduğunu bile bile “imdat” başlıklı tamamen anlamsız, gereksiz, alakasız, aptalca yazılar yazanlar bile var. Gezegenin de bir adabı olmalı. Bence yayınlamaktan çekinme bunları. Gezegen okuyanların hepsi profesyonel insanlar değiller sıralam algoritması deyip geçmemeli;)

  4. Vlk Der ki:

    Güzel zamanında biri de sizin gibi kafayı yemiş :D

    http://www.igdirmyo.com/smf/index.php/board,95.20.html

  5. PINguAR Der ki:

    İçimden bi ses o biri’nin siz olduğunu söylüyor :)

Yorum Yapın

Not: Yorumlarınız admin tarafından onaylandıktan sonra görünebilir olacak.


En Popüler Yazılar

Kategoriler

Son Yazılanlar

Arşiv

İstatistikler

  • Şu an Pınar'ın Linux Günlüğü'nde 93 yazı ve
  • 1074 yorum var.
  • Ziyaretçiler

    • 5 <- şu anki çevrimiçi kişi sayısı
    • 34 <- aynı anda maksimum çevrimiçi kişi sayısı
    • 362260 <- toplam ziyaretçi

    Pardus

    Pardus... Özgürlük İçin...

    Lisans

    Creative Commons License

    Bu günlük Creative Commons ile lisanslanmıştır.