Bu algoritmanın adımlarını şu şekil ifade edebiliriz.
1-Sıralı olmayan listeyi ortadan eşit olarak iki alt listeye ayır .(Bu adım liste ikiye ayrılmayana dek devam eder.)
2-Alt listeleri kendi içinde sırala.
3-Sıralı iki alt listeyi tek bir sıralı liste olacak şekilde birleştir.
Bir sayı dizisi üstünde örneklendirecek olursak;
Dizimiz : 45-56-28-18-72-14-23-32
[45-56-28-18] [72-14-23-32] //Dizimizi ikiye ayırdık
[45-56] [28-18] [72-14] [23-32] //Tekrar ikiye ayırıyoruz.
[45] [56] [28] [18] [72] [14] [23] [32] //Dizimiz parça parça oldu.
\ / \ / \ / \ /
[45-56] [18-28] [14-72] [23-32] //İkili ikili sıralı bir şekilde birleştirmeye başlıyoruz.
\ / \ /
[18-28-45-56] [14-23-32-72] //Yeniden sıralı bir şekilde birleştirme yapıyoruz.
\ /
[14-18-23-28-32-45-56-72] // Tüm diziyi sıralı bir şekilde birleştiriyoruz.
Bu algoritma recursive şekilde gerçeklenir.
Merge sort sıralama algoritmasının java kodu aşağıdaki şekilde olur.
public static void mergeSort(int array[],int lo, int n){ int bas = lo; int son = n; if (bas >= son) { return; } int middle = (bas + son) / 2; mergeSort(array, bas, middle); mergeSort(array, middle + 1, son); int basinSonu = middle; int sonunBasi = middle + 1; while ((bas <= basinSonu) && (sonunBasi <= son)) { if (array[bas] < array[sonunBasi]) { bas++; } else { int Temp = array[sonunBasi]; for (int k = sonunBasi- 1; k >= bas; k--) { array[k+1] = array[k]; } array[bas] = Temp; bas++; sonunBasi++; } } }
Kolay gelsin.
0 yorum:
Yorum Gönder