[]

Quick Sort'un bu kadar hızlı olması normal mi?

adı üzerinde demeyin lütfen. 100000 adet random sayi ürettim ve bunları bubble sort, insertion sort ve quick sort'la sıralattım.

insertion sort 11 saniye
bubble sort 61 saniye
quicksort 0.1 saniye sürdü.normal mi bu?

kodum eşek kadar olmasına rağmen yine de paylaşayım

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

void quicksort (int a[100000], int altindis, int ustindis)
{
int i=altindis, j=ustindis, temp;
int pivot = a[(altindis+ustindis)/2];

while(i<=j)
{
while(a[i]<pivot)
i++;
while(a[j]>pivot)
j--;
if(i<=j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}

if(altindis<j)
quicksort(a, altindis, j);
if(i<ustindis)
quicksort(a, i, ustindis);
}

int main()
{
//bubble sort
int sayi, i, j, temp, secim;
srand(time(NULL));
while(1==1) {
printf("\nkac adet sayi üreteceksiniz?... ");
scanf("%d", &sayi);
int dizi[sayi];

for (i=0; i<sayi; i++)
{
dizi[i]=rand()%1000;
}

printf("\nHangi siralama methoduyla sıralayacaksiniz?\n 1- Bubble Sort \n 2- Insertion Sort \n 3- Quick Sort\n");
scanf("%d", &secim);

if (secim == 1)
{
clock_t tic1 = clock();

for (i=1; i<sayi; i++)
{
for(j=0; j<sayi; j++)
{
if(dizi[j]>dizi[j+1])
{
temp = dizi[j];
dizi[j] = dizi[j+1];
dizi[j+1] = temp;
}
}
}

clock_t toc1 = clock();

for(i=0; i<sayi; i++)
{
printf("%d\n", dizi[i]);
}

printf("gecen süre: %f saniye\n", (double)(toc1 - tic1) / CLOCKS_PER_SEC);
}

else if (secim == 2)
{
clock_t tic2 = clock();

for (i=1; i<sayi; i++)
{
temp = dizi[i];
j = i-1;
while (temp<dizi[j] && j>=0)
{
dizi[j+1] = dizi[j];
--j;
}
dizi[j+1] = temp;

}

clock_t toc2 = clock();

for(i=0; i<sayi; i++)
{
printf("%d\n", dizi[i]);
}

printf("gecen süre: %f saniye\n", (double)(toc2 - tic2) / CLOCKS_PER_SEC);
}

else if (secim == 3)
{ clock_t tic3 = clock();
quicksort (dizi, 0, i);
clock_t toc3 = clock();
for(i=0; i<sayi; i++)
{
printf("%d\n", dizi[i]);
}
printf("gecen süre: %f saniye\n", (double)(toc3 - tic3) / CLOCKS_PER_SEC);
}

}
getch();
}

 
Insertion sort O(n^2)
Bubble sort O(n^2)
Quick sort O(n log n)
Buradan: n^2 / n log n =
(100000^2)÷(100000×log(100000))== 20000
61 saniye / 20000 = epey kucuk bir saniye.
  • compumaster  (11.03.15 06:30:31 ~ 08:33:44) 
halen emin değilsen test case'leri yaz hepsi doğru sonuç veriyorsa problem yok.


  • medievalman  (11.03.15 07:57:28) 
bubble sort'da bir satır düzeltme yaptım, hız 40 saniyelere düştü. compumaster'ın hesaplaması doğru, quicksort'un hızı hayretler içinde bıraktı beni.


  • joffrey reis  (11.03.15 08:08:24) 
bir de heap sort yaz


  • compumaster  (11.03.15 08:34:48) 
quicksort adamdir.

en.wikipedia.org

bak asagida oranlar var.
  • hmpf  (11.03.15 09:44:57) 
görselle desteklenmiş hali :

i.imgur.com
  • kimlanbu  (11.03.15 11:12:07) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.