Sunday 05th of September 2010

 
Merge Sort PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 0
ZayıfEn iyi 
ilyas tarafından yazıldı   
Pazartesi, 09 Mart 2009 21:13

Ah Merge Sort ahhh.senin bende büyük bir anin var ama bu merge biraz farkli yazdigimdan satir sayisi olarak.Amac elindeki bilgiyi ikiye böl ve içlerini sirala.siraladiklarini diger dosyanin içindekilerle birlestir ve onarida kendi içlerinde sirala gibi karilsik bisiy.Nekadar gerek var bilmem ama malloc, ramda olan kod kismi bu.dosya olani bosverin yorucu:)) Kod bana ait deildir:)ama anlatayim yinede takildiginiz yer olursa yorumlardan iletirsiniz

Output:45 4 12 56 87 -6 0 587 -56 4
-56 -6 0 4 4 12 45 56 87 587

  • #include <stdio.h>
    #include <stdlib.h>
  • #define A_SIZE 10
  • void merge_sort(int *p, int size);//sort yapilacak olan fonksiyon tanimi
    void print_array(int *p, int size);
    int main(void)
    {
    int a[A_SIZE] = {45, 4, 12, 56, 87, -6, 0, 587, -56, 4};
  • print_array(a, A_SIZE);//görüldügü gibi fonksiyolar çagriliyor
    merge_sort(a, A_SIZE);
    print_array(a, A_SIZE);
    return 0;
    }
    /**************************************/
    void merge_sort (int *p, int size)
    {
    int *t, *q, *buf;
    int left, len, count1, count2, source1, source2, dest;
  • if (size <= 1)
    return;
    buf = q = (int *) malloc(size * sizeof(int));//ramden yer ayiriyoruz
    if (buf == NULL) {
    printf("not enough memory!");
    exit(EXIT_FAILURE);//ram de yer yetersizse hatali cikis verir
    }
    len = 1;
  • do {
    left = size;
    source1 = dest = 0; source2 = len;
    do {
    left -= count1 = (left >= len) ? len : left;
    left -= count2 = (left >= len) ? len : left;
    while (count1 > 0 && count2 > 0) {
    if (p[source1] < p[source2]) {
    q[dest++] = p[source1++];
    count1--;
    }
    else {
    q[dest++] = p[source2++];
    count2--;
    }
    }
    while (--count1 >= 0)
    q[dest++] = p[source1++];
    while (--count2 >= 0)
    q[dest++] = p[source2++];
    source1 += len; source2 += len;
    } while (left > 0);
    t = p;
    p = q;
    q = t;
    len *= 2;
    } while (len < size);
    if (p == buf)
    while (--size >= 0)
    q[size] = p[size];
    free(buf);
    }
    /**************************************/
    void print_array(int *p, int size)
    {
    int i;
  • for (i = 0; i < size; i++)
    printf("%d ", p[i]);
    putchar('\n');
    }
 

HOŞGELDINIZ

Ne kadar küçük şeyler için ağlardık,
Bir tutam saç, bir oyuncak araba, bir bebek.
Şimdi büyüdük,
Çok büyük olaylar bile aglatamıyor bizleri
ölümler, iflaslar, sawaşlar..
Şimdi dahami qüçlüyüz
yoksa dahami alışkın.
Hayatı öğrenmek
alışmakmı acaba.

PC BAKIM

Istatistikler

Üyeler : 35
İçerik : 46
Web Bağlantıları : 6
İçerik Tıklama Görünümü : 24608

Anketler

Site Yorumu
 

Google Reklamları


Destekleyen Joomla!. Designed by: Joomla Template, WebSiteSource. Valid XHTML and CSS.