Tutorial Marge Sort Di C | Rizky Abdul Ghani S 1154058

22:14 Pemrograman Web 8 Comments



Merge Sort
Menggabungkan data berdasarkan Divide dan metode menyusun. Dibutuhkan daftar data yang akan diurutkan dan membagi menjadi dua untuk membuat dua daftar yang akan disortir. Dua daftar yang akan disortir tersebut kemudian diurutkan dan digabungkan untuk mendapatkan daftar data diurutkan. Dua daftar disortir diurutkan dengan terus memanggil algoritma merge-sort; kami akhirnya mendapatkan daftar ukuran 1 yang sudah diurutkan. Dua daftar ukuran 1 kemudian digabung.

Contoh penerapan Marge Sort :
1.       Jika kita memasukan data berupa angka
10, 1, 9, 2, 8, 3, 7, 4, 6, dan 5
2.       Program akan mencari dari angka terendah
3.       Kemudian program akan mengurutkan dari kecil ke yang besar
4.       Setelah itu maka akan jadi seperti dibawah ini
1, 2, 3, 4, 5, 6, 7, 8, 9, dan 10
Masukan jumlah elemen yang ada dalam array (number_of_elements). input

array (array [number_of_elements]). Kemudian memanggil fungsi mergesort () untuk mengurutkan array input. Mergesort () fungsi macam array dalam rentang [kiri, kanan] yaitu dari indeks kiri ke kanan indeks inklusif. Merge () fungsi menggabungkan dua bagian diurutkan. bagian diurutkan akan berasal dari [kiri, pertengahan] dan [Tengah + 1, kanan]. Setelah penggabungan output array diurutkan.
Mergesort () fungsi:
Dibutuhkan array, paling kiri dan paling kanan indeks array yang akan diurutkan sebagai argumen.
Indeks Tengah (pertengahan) dari array dihitung sebagai (kiri + kanan) / 2. Periksa apakah (kiri <kanan) menyebabkan kita harus menyortir hanya ketika meninggalkan <tepat karena bila dibiarkan = kanan itu bagaimanapun diurutkan. Mengurutkan bagian kiri dengan memanggil mergesort () fungsi lagi atas bagian mergesort kiri (array, kiri, tengah) dan kanan sebagian oleh panggilan rekursif fungsi Mergesort sebagai mergesort (array, pertengahan + 1, kanan). Terakhir menggabungkan dua array menggunakan fungsi Merge.
Merge () fungsi:
Dibutuhkan array, paling kiri, tengah dan kanan paling-indeks dari array untuk digabung sebagai
argumen. Sebuah array sementara (tempArray [kanan-kiri + 1]) diperlukan untuk menyimpan bagian diurutkan baru.
Indeks posisi saat (pos) dari array sementara diinisialisasi ke 0. posisi indeks yang tersisa (Lpos) diinisialisasi ke kiri dan indeks posisi yang tepat (RPOs) diinisialisasi hingga pertengahan + 1, dari array.
Dan ini adalah codingan program Marge Sort buatan saya :
#include <stdio.h>
#define MAX 10
int angka[MAX];
int memori[MAX];

void merge(int angka[], int memori[], int kiri, int tengah, int kanan)
{
            int i, kiri_akhir, elemen, simpan;
            kiri_akhir = tengah - 1;
            simpan = kiri;
            elemen = kanan - kiri + 1;

            while ((kiri <= kiri_akhir) && (tengah <= kanan))
            {
                        if (angka[kiri] <= angka[tengah])
                        {
                                    memori[simpan] = angka[kiri];
                                    simpan = simpan + 1;
                                    kiri = kiri +1;
                        }
                        else
                        {
                        memori[simpan] = angka[tengah];
                        simpan = simpan + 1;
                        tengah = tengah + 1;
                        }
            }
            while (kiri <= kiri_akhir)
            {
                        memori[simpan] = angka[kiri];
                        kiri = kiri + 1;
                        simpan = simpan + 1;
            }
            while (tengah <= kanan)
            {
                        memori[simpan] = angka[tengah];
                        tengah = tengah + 1;
                        simpan = simpan + 1;
            }

            for (i=0; i <= elemen; i++)
            {
                        angka[kanan] = memori[kanan];
                        kanan = kanan - 1;
            }
}

void m_sort(int angka[], int memori[], int kiri, int kanan)
{
            int tengah;
            if (kanan > kiri)
            {
                        tengah = (kanan + kiri) / 2;
                        m_sort(angka, memori, kiri, tengah);
                        m_sort(angka, memori, tengah+1, kanan);
                        merge(angka, memori, kiri, tengah+1, kanan);
            }
}

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

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

            mergeSort(angka, memori, MAX);
            printf("\nangka SETELAH TERURUT : ");
            for (i = 0; i < MAX; i++)
            printf("%d  ", angka[i]);
            printf("\n");
            return(0);

}

Rizky Abdul Ghani Suherli
1154058

https://github.com/rizkyghani16/Marge-Sort

8 komentar:

  1. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  2. Thanks bro tugas saya kebantu :D

    BalasHapus
  3. Mantap, main juga ke blog saya bro

    BalasHapus
  4. Trims ilmunya, sangat bermanfaat :D

    BalasHapus
  5. Terimakasih kaka,setelah membaca blog kaka tugas ku jadi beres dan di beri nilai A oleh dosen kuu

    BalasHapus