Hızlı Sıralama Algoritması örneği (işaretçiler ile)

Başlatan Jey@Nfer, 02 Nisan 2012 - 12:00:25

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Jey@Nfer

Sıralama algoritmaları c içinde önemli bir yere sahiptir. Pointer konusu da öyle.
Sıralama algoritmalarından olan hızlı sıralama algoritması hayli ilginç bir yapıya sahip, parçala ve sırala mantığı var. Parçalama ayrı bir algoritma ,sıralama ayrı bir algoritmaya sahip :) Bu iki hoş konuyu bir arada görmek isteyip yazayım dedim.

Çok az bir c bilgisi gerektiriyor ; benim gibi öğrenme aşamasındaki arkadaşlara faydalı olabileceğini düşünüyorum :



#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ADET 10

void hizliSiralama(int*,int*);
int* yerlestir(int*, int*);

main()
{

srand(time(NULL));

int dizi[ADET], i;

    for(i=0; i<ADET; i++) dizi[i]=1+rand()%50;

    for(i=0; i<ADET; i++) printf(" %d ", dizi[i]);

printf("\n");
hizliSiralama(&dizi[ADET-1],&dizi[0]);
printf("\nSirali Dizi : \n");

for(i=0; i<ADET; i++) printf(" %d ", dizi[i]);

printf("\n\n\n");

}

void hizliSiralama(int *buyuk, int *kucuk)
{
int *orta;

    orta=yerlestir(buyuk,kucuk);

    if(buyuk<=kucuk){ orta=yerlestir(buyuk,kucuk); return; }

    if( (orta) < buyuk )
    hizliSiralama(buyuk,++orta);

    if( (orta) > kucuk )
    hizliSiralama(--orta,kucuk);

}

int* yerlestir( int *bas , int *son )
{
int *sayac, i;

    if(bas>son)
    {
        for(sayac=bas ; son<sayac ; sayac-- )
        {
            if(*son>*sayac)
            {
                i=*son; *son=*sayac; *sayac=i;

                yerlestir(son+1,sayac); return;
            }
        }
    }

    else if(bas<son)
    {
        for(sayac=bas; son>=sayac ; sayac++)
        {
            if(*son<*sayac)
            {
                i=*son; *son=*sayac; *sayac=i;

                yerlestir(son-1,sayac);
                return;
            }
        }
    }

    else sayac=bas;

return sayac;

}

 

Umarım faydalı olur!

Ayrıca yazım aşamasında bir kaç defa "Segmentation fault" hatası almıştım. Şu an vermiyor olması gerekiyor; ancak yine de böyle bir hata alan olursa , hata veren sayı dizisini yazabilir mi?
Hırs , azim , tevekkül ...

www.mehmetvahit.net

iskn90

o kadar alışmışım ki ingilizceye, türkçe kod görünce çok yeni birşeymiş gibi durdu gözümde =)
Tell me and I'll forget,
Show me and I may remember,
Involve me (I do) and I'll understand (I learn)