C#, Asp.Net, .Net Core
Quick Sort Ve Merge Sort'un Sıralama Süresini Nasıl Hesaplayabilirim ?
Quick Sort Ve Merge Sort'un Sıralama Süresini Nasıl Hesaplayabilirim ?
-
Günaydın. Hoca 5 tane sort öğretti bunlardan 2 tanesi quick sort ve merge sort.
Bu iki sıralama algoritmasıda recursive(özyineleme) türündeki fonksiyonlar. Bu sıralama algoritmalarının 500,000 sayı için sıralama süresini hesaplatmam lazım.
Öteki 3 sıralama(insertion , bubble , selection ) için yazdım fakat bu fonksiyonlar recursive oldukları için beceremedim.
Örnek kod şu
// MERGE SORT BASLANGICI \\ public void AnaMerge(int[] Array, int sol, int orta, int sag, int size) { var sure = System.Diagnostics.Stopwatch.StartNew(); int[] temp = new int[size]; int i, eol, num, pos; eol = (orta - 1); pos = sol; num = (sag - sol + 1); while ((sol <= eol) && (orta <= sag)) { if (Array[sol] <= Array[orta]) temp[pos++] = Array[sol++]; else temp[pos++] = Array[orta++]; } while (sol <= eol) temp[pos++] = Array[sol++]; while (orta <= sag) temp[pos++] = Array[orta++]; for (i = 0; i < num; i++) { Array[sag] = temp[sag]; sag--; } sure.Stop(); // İşlem bittikten sorna sayaç durdurulur. listBox7.Items.Add(sure.ElapsedMilliseconds + " ms"); listBox8.Items.Add(Array.Length); } public void SortMerge(int[] Array, int sol, int sag,int size) { int mid = 0; if (sag > sol) { mid = (sag + sol) / 2; SortMerge(Array, sol, mid,size); SortMerge(Array, (mid + 1), sag,size); AnaMerge(Array,sol,(mid + 1),sag,size); } } // MERGE SORT SONU \\
Button4 bir diziye rastgele 500000 sayı atıyor. Bende bu diziyi SortMerge isimli fonksiyona yolluyorum. sonra işte ikiye bölüyor büyük mü küçük mü filan diyor.
Çıktının Şu tarz birşey olmasını istiyorum
ama yukardaki kod hata veriyor. Aklıma başka çözüm yolu olarak işlemin bitiş saatinden başlangıç saatini çıkartıp 1000 ile çarpmak geldi fakat onuda beceremedim.
Yardımcı olurmusun :D
EDIT : Tamamdır Çözdüm Çalışıyor Şuanda :D 1 saat içinde eklerim source kodu :D
GodKlaus tarafından 10/Mar/17 09:30 tarihinde düzenlenmiştir -
Yanlis yere koymussun saati. Main ac bi tane. Mergesort recursive kisim. Anamerge dedigin geri toplama safhasi. Mainden mergesortu baslatmadan once saati koy fonkiyon call sonrasi satirdada end et saati. Bu arada anladigim kadariyla divide and conquer alg. anlamamissin tekrar et.
-
whopper bunu yazdı
Yanlis yere koymussun saati. Main ac bi tane. Mergesort recursive kisim. Anamerge dedigin geri toplama safhasi. Mainden mergesortu baslatmadan once saati koy fonkiyon call sonrasi satirdada end et saati. Bu arada anladigim kadariyla divide and conquer alg. anlamamissin tekrar et.
İşin aslı şu hocam. Bu 5 sorgunun 500,000 ayıyı dizmesi için geçen süreyi gösteren program yapmam lazım ya. Main fonksiyondan kastın sanırım Form_Load. ve Form_Load'da birsürü şey var. İşlem başladığında bi sayaç koydum eğer 0sa1 yap 1veya daha fazlaysa dokunma dedim. Sonra 1 olduğu andaki saati aldırıp işlem bittiğindeki saatten çıkarttım. Hocaya söyledim böyle böyle yaptım diye. Hata payı çok yüksek olmaz öyle başka birşey düşün dedi.
Aklıma gelmiyor ve yazdıklarından sadece "Main aç bi tane" kısmını anlamadım ):
-
dönem başında yapmıştım javada bunu. 5 sortu aynı arrayleri karşılaştırmak üzere N sayıda sort ile, sonrada çıktı sonuçlarını analiz etmiştim: https://drive.google.com/open?id=0B73c9YuqOJmSM1Npdl84dnY4dGVodTM2UUxST1NrTTlpZDJN
-
whopper bunu yazdı
dönem başında yapmıştım javada bunu. 5 sortu aynı arrayleri karşılaştırmak üzere N sayıda sort ile, sonrada çıktı sonuçlarını analiz etmiştim: https://drive.google.com/open?id=0B73c9YuqOJmSM1Npdl84dnY4dGVodTM2UUxST1NrTTlpZDJN
teşekkürler hocam inceliyorum şimdi :)
-
Evveeet sonunda bitirdim :D Birazcık amatörce oldu lakin bitti :D
-- Buradada source code var. İncelemek isteyenler bakabilirler :D
https://drive.google.com/drive/folders/0B2HM483lS-R6NDUxdjZxWHl4RDQ?usp=sharing