Penjelasan
Algoritma merge sort membagi (split) tabel menjadi
dua tabel sama besar. Masing-masing tabel diurutkan secara rekursif, dan
kemudian digabungkan kembali untuk membentuk tabel yang terurut. contoh dari
bahasa C ini tidak jauh berbeda denganprogram
delphi.
Implementasi dasar dari algoritmamerge sort memakai tiga buah tabel, dua untuk
menyimpan elemen dari tabel yang telah dibagi dua dan satu untuk menyimpan
elemen yang telah teurut. Namun
algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan. Di bawah ini adalah algoritma untuk merge sort yang dilakukan pada dua tabel. dalam notasi C
algoritma ini dapat juga dilakukan langsung pada dua tabel, sehingga menghemat ruang atau memori yang dibutuhkan. Di bawah ini adalah algoritma untuk merge sort yang dilakukan pada dua tabel. dalam notasi C
void mergeSort (int *T, int
*temp, int Nmax)
/*I.S. T tabel dgn elemen bertipe*/
/* integer, T tidak kosong*/
/*F.S T terturut menaik*/
/* Proses : melakukan pengurutan*/
/* dengan melakukan metode sort*/
{
m_sort (T, temp, 0, Nmax -1);
}
void m_short (int *T, int *temp, int *left, int *right)
{
int mid;
if (*right > *left)
{
mid = (*right + *left) / 2;
m_sort (T, temp, left, mid);
m_sort (T, temp, mid+1, right);
merge (T, temp, left, mid+1, right);
}
}
void merge(int *T, int * temp, int left, int mid, int right)
{
int i, left_end, num_elements, tmp_pos;
/*I.S. T tabel dgn elemen bertipe*/
/* integer, T tidak kosong*/
/*F.S T terturut menaik*/
/* Proses : melakukan pengurutan*/
/* dengan melakukan metode sort*/
{
m_sort (T, temp, 0, Nmax -1);
}
void m_short (int *T, int *temp, int *left, int *right)
{
int mid;
if (*right > *left)
{
mid = (*right + *left) / 2;
m_sort (T, temp, left, mid);
m_sort (T, temp, mid+1, right);
merge (T, temp, left, mid+1, right);
}
}
void merge(int *T, int * temp, int left, int mid, int right)
{
int i, left_end, num_elements, tmp_pos;
left_end + mid-1;
tmp_pos = left;
num_elements = right – left + 1;
while ((left <= left_end) && (mid <= right))
{
if (*T[left] <= *T[mid])
{
*temp[tmp_pos] = *T[left];
tmp_pos = tmp_pos +1;
left = left +1;
}
else
{
*temp [tmp_pos] = *T [mid];
tmp_pos = tmp_pos + 1;
mid = mid +1;
}
}
while (left <= left_end);
{
*temp[tmp_pos] = *T[left];
left = left +1;
tmp_pos = tmp_pos +1;
}
while (mid <= right)
{
*temp [tmp_pos] = *T [mid];
mid = mid +1;
tmp_pos = tmp_pos + 1;
}
for (i=0; i <= num_elements; i++)
{
*T[right] = *temp[right];
right = right -1;
}
}
tmp_pos = left;
num_elements = right – left + 1;
while ((left <= left_end) && (mid <= right))
{
if (*T[left] <= *T[mid])
{
*temp[tmp_pos] = *T[left];
tmp_pos = tmp_pos +1;
left = left +1;
}
else
{
*temp [tmp_pos] = *T [mid];
tmp_pos = tmp_pos + 1;
mid = mid +1;
}
}
while (left <= left_end);
{
*temp[tmp_pos] = *T[left];
left = left +1;
tmp_pos = tmp_pos +1;
}
while (mid <= right)
{
*temp [tmp_pos] = *T [mid];
mid = mid +1;
tmp_pos = tmp_pos + 1;
}
for (i=0; i <= num_elements; i++)
{
*T[right] = *temp[right];
right = right -1;
}
}
Karena algoritma merge sort
adalah algoritma yang dijalankan secara rekursif maka T(n) dari algoritma ini
adalah:
Sehingga, algoritma merge
sort memiliki
kompleksitas algoritma O(n log n). Algoritmamerge sort ini sebenernya lebih cepat
dibandingkan heap sort untuk tabel yang lebih besar. Namun, algoritma ini
membutuhkan setidakny ruang atau emori dua kali lebih besar karena dilakukan
secara rekursif dan memakai dua tabel. Hal ini menyebabkan algoritma ini kurang
banyak dipakai.
Mungkin itu sedikit yang saya
ketahui dari Merge Sort, sekian
dan terima kasih..dan Saya sangat berterimakasih jika anda bersedia memberikan
kritik, saran maupun komentar atas kekurangan, error, broken links dan lainnya,
masukan dari anda sangat membantu untuk perbaikan tutorial maupun blog ini.
No comments:
Post a Comment