PROGRAM SEDERHANA MARGESORT BAHASA C++

00:01 Pemrograman Web 9 Comments




Selamat Datang, balik lagi nih saya akan menjelaskan marge sort pada bahasa C. buat kalian yang lagi cari referensi mungkin ini bisa membantu. Bisa di simak coding programnya. Tapi. Saya jelas kan dulu ya MARGE SORT itu apa.

Merge sort merupakan algoritma pengurutan dalam ilmu komputer yang dirancang untuk memenuhi kebutuhan pengurutan atas suatu rangkaian data yang tidak memungkinkan untuk ditampung dalam memori komputer karena jumlahnya yang terlalu besar. Algoritma ini ditemukan oleh John von Neumann pada tahun 1945.

Berikut koding programnya :

#include <stdio.h>
#define MAX 10
int Data[MAX];
int temp[MAX];

// Prosedur merge sort
void merge(int Data[], int temp[], int kiri, int tengah, int kanan)
{
            int i, left_end, num_elements, tmp_pos;
            left_end = tengah - 1;
            tmp_pos = kiri;
            num_elements = kanan - kiri + 1;

            while ((kiri <= left_end) && (tengah <= kanan))
            {
                        if (Data[kiri] <= Data[tengah])
                        {
                                    temp[tmp_pos] = Data[kiri];
                                    tmp_pos = tmp_pos + 1;
                                    kiri = kiri +1;
                        }
                        else
                        {
                        temp[tmp_pos] = Data[tengah];
                        tmp_pos = tmp_pos + 1;
                        tengah = tengah + 1;
                        }
            }
            while (kiri <= left_end)
            {
                        temp[tmp_pos] = Data[kiri];
                        kiri = kiri + 1;
                        tmp_pos = tmp_pos + 1;
            }
            while (tengah <= kanan)
            {
                        temp[tmp_pos] = Data[tengah];
                        tengah = tengah + 1;
                        tmp_pos = tmp_pos + 1;
            }

            for (i=0; i <= num_elements; i++)
            {
                        Data[kanan] = temp[kanan];
                        kanan = kanan - 1;
            }
}
// Prosedur membuat kumpulan data
void m_sort(int Data[], int temp[], int kiri, int kanan)
{
            int tengah;
            if (kanan > kiri)
            {
                        tengah = (kanan + kiri) / 2;
                        m_sort(Data, temp, kiri, tengah);
                        m_sort(Data, temp, tengah+1, kanan);
                        merge(Data, temp, kiri, tengah+1, kanan);
            }
}

void mergeSort(int Data[], int temp[], int array_size)
{
            m_sort(Data, temp, 0, array_size - 1);
}

int main()
{
            int i;
            printf("Masukkan DATA SEBELUM TERURUT : \n");
            for (i = 0; i < MAX; i++)
            {
                        printf ("Data ke %i : ", i+1);
                        scanf ("%d", &Data[i]);
            }

            mergeSort(Data, temp, MAX);
            printf("\nDATA SETELAH TERURUT : ");
            for (i = 0; i < MAX; i++)
            printf("%d  ", Data[i]);
            printf("\n");
            //scanf("%d");
            return(0);
}

Berikut outputnya :












Dibawah ini saya akan menjelaskan codingnya , bisa di simak terlebih dahulu :
v  int Data[MAX];
int temp[MAX];
            Maksudnya adalah integernya berbentuk Data maksimal dan temp maksimal.
v  // Prosedur merge sort void merge(int Data[], int temp[], int kiri, int tengah, int kanan)
Ini adalah sebuah komentar
v  int i, left_end, num_elements, tmp_pos;
            left_end = tengah - 1;
            tmp_pos = kiri;
            num_elements = kanan - kiri + 1;
            Maksud koding ini adalah integer I berapa di left_end yaitu kiri dan bertambah 1.
v  while ((kiri <= left_end) && (tengah <= kanan))
v  if (Data[kiri] <= Data[tengah])
v  temp[tmp_pos] = Data[kiri];
            tmp_pos = tmp_pos + 1;
            kiri = kiri +1;
v  else
             temp[tmp_pos] = Data[tengah];
             tmp_pos = tmp_pos + 1;
             tengah = tengah + 1;
v  while (kiri <= left_end)
            {
                        temp[tmp_pos] = Data[kiri];
                        kiri = kiri + 1;
                        tmp_pos = tmp_pos + 1;
            }
v  while (tengah <= kanan)
            {
                        temp[tmp_pos] = Data[tengah];
                        tengah = tengah + 1;
                        tmp_pos = tmp_pos + 1;
            }

v  for (i=0; i <= num_elements; i++)
            {
                        Data[kanan] = temp[kanan];
                        kanan = kanan - 1;
            }

v  // Prosedur membuat kumpulan data void m_sort(int Data[], int temp[], int kiri, int kanan)
Sebuah komentar
v  int tengah;
            if (kanan > kiri)
                        tengah = (kanan + kiri) / 2;
                        m_sort(Data, temp, kiri, tengah);
                        m_sort(Data, temp, tengah+1, kanan);
                        merge(Data, temp, kiri, tengah+1, kanan);
            maksudnya adalah integer berada di tengah, jika kanan lebih besar dari kiri.
v  mergeSort(Data, temp, MAX);
            printf("\nDATA SETELAH TERURUT : ");
            for (i = 0; i < MAX; i++)
            printf("%d  ", Data[i]);
            printf("\n");
            //scanf("%d");
            return(0);
            ini untuk menampilkan hasilnya.



TIARA RIZKI WULANSARI
D4 TI 1B

https://github.com/aratiarw/MARGESORT

9 komentar: