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

halen emin değilsen test case'leri yaz hepsi doğru sonuç veriyorsa problem yok.

medievalman

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

bir de heap sort yaz

compumaster

quicksort adamdir.

en.wikipedia.org

bak asagida oranlar var.

hmpf

görselle desteklenmiş hali :

i.imgur.com

kimlanbu
1

mobil görünümden çık