Algoritma dan Struktur Data - Merge Sort

18
Pengurutan Merge Algoritma dan Struktur Data Georgius Rinaldo [email protected]

description

Pengenalan algoritma dari metode pengurutan merge atau merge sort

Transcript of Algoritma dan Struktur Data - Merge Sort

Page 1: Algoritma dan Struktur Data - Merge Sort

Pengurutan Merge

Algoritma danStruktur Data

Georgius Rinaldo

[email protected]

Page 2: Algoritma dan Struktur Data - Merge Sort

Merge sort adalah metode pengurutan yang dilakukan dengan memecah penampung elemen tepat menjadi 2 sampai tersisa hanya menjadi 1 partisi, kemudian mengiterasi dengan membandingkan dan menggabungkan secara berulang.

Pendahuluan

Page 3: Algoritma dan Struktur Data - Merge Sort

Proses - Memecah6 5 3 1 8 7 2 4

6 5 13 78 42

6 5 3 1 8 7 2 4

6 5 3 1 8 7 2 4

Page 4: Algoritma dan Struktur Data - Merge Sort

Proses - Membandingkan

6 5 13 78 42

Bandingkan satu per satu elemen yang sudah dipecah

Page 5: Algoritma dan Struktur Data - Merge Sort

Proses - Tukar

5 6 13 78 42

Tukar posisi elemen jika posisi tidak benar.Jika posisi sudah benar, maka lewati dan lanjut ke elemen berikutnya

Page 6: Algoritma dan Struktur Data - Merge Sort

Proses - Bandingkan Lagi

5 6 13 78 42

Lanjutkan ke dua elemen berikutnya untuk dibandingkan

Page 7: Algoritma dan Struktur Data - Merge Sort

Proses - Tukar Lagi

5 6 31 78 42

Tukar kembali

Page 8: Algoritma dan Struktur Data - Merge Sort

Proses - Iterasi Selesai

5 6 1 3 7 8 2 4

5 6 31 87 42

Setelah selesai, gabungkan elemen-elemen yang telah terurut tadi sehingga membentuk tabel-tabel baru seperti di gambar berikut

Page 9: Algoritma dan Struktur Data - Merge Sort

Proses - Perbandingan Kembali

5 6 1 3 7 8 2 4

Bandingkan:● elemen pertama pada tabel pertama dengan elemen pertama pada tabel kedua dan

sebaliknya secara bergantian● bandingkan elemen terakhir yang belum dimasukkan ke tabel baru (5) dengan

elemen lainya

1 3

Page 10: Algoritma dan Struktur Data - Merge Sort

Proses - Perbandingan Kembali

5 6 1 3 7 8 2 4

Bandingkan:● Pada tabel kedua sudah habis● bandingkan elemen terakhir yang belum dimasukkan ke tabel baru (5) dengan

elemen lainya (6) yang tersisa

1 3 5 6

Page 11: Algoritma dan Struktur Data - Merge Sort

Hasil Iterasi

5 6 1 3 7 8 2 4

Tabel yang baru yang siap dibandingkan dengan proses yang sama

1 3 5 6 2 4 7 8

Page 12: Algoritma dan Struktur Data - Merge Sort

Perbandingan Tabel Baru

Lakukan perbandingan seperti sebelumnya

1 3 5 6 2 4 7 8

1 2 3 4 5 6 7 8

Page 13: Algoritma dan Struktur Data - Merge Sort

function mergeSort(Input m: list) → list if length(m) ≤ 1 → m var list left, right, result var integer middle = length(m) / 2 for each x in m up to middle begin add x to left end for each x in m after middle begin add x to right end left = mergeSort(left) right = mergeSort(right) result = merge(left, right) → result

function merge(Input: left list,Input right: list) → list list result while (length(left) > 0 or length(right) > 0) do begin if (length(left) > 0 and length(right) > 0) if first(left) ≤ first(right) append first(left) to result left = rest(left) else append first(right) to result right = rest(right) else if length(left) > 0 append first(left) to result left = rest(left) else if length(right) > 0 append first(right) to result right = rest(right) end → result

Pseudocode dengan List

Page 14: Algoritma dan Struktur Data - Merge Sort

Kode C++template <class M>void myMerge( M arr[], int lb, int mid, int ub ) { int i, j; int size1 = mid - lb + 1; int size2 = ub - mid; M* tmpArray1 = new M[size1]; M* tmpArray2 = new M[size2]; for( i=0; i<size1; i++ ) { tmpArray1[i] = arr[lb + i]; } for( j=0; j<size2; j++ ) { tmpArray2[j] = arr[mid + 1 + j]; } i = 0; j = i; … // lanjut ke slide berikutnya

Page 15: Algoritma dan Struktur Data - Merge Sort

Kode C++ - lanjutanfor( int k=lb; k<=ub; k++ ) { if (i == size1) { // Kalau range array pertama lebih kecil arr[k] = tmpArray2[j]; j++; } else if (j == size2) { // Kalau range array kedua lebih kecil arr[k] = tmpArray1[i]; i++; } else if ( tmpArray1[i] < tmpArray2[j] ) { arr[k] = tmpArray1[i]; i++; } else { arr[k] = tmpArray2[j]; j++; } } delete[] tmpArray1; // delete[] tmpArray2; // Bersihkan alokasi arraynya}

Page 16: Algoritma dan Struktur Data - Merge Sort

Kode C++ - lanjutan 2void mergeSort( int arr[], int lb, int ub ) { if (ub - lb > 1) { int mid = (lb + ub) / 2; mergeSort(arr, lb, mid); mergeSort(arr, mid + 1, ub); myMerge(arr, lb, mid, ub); } else { if (arr[ub] < arr[lb]) { int tmp = arr[ub]; arr[ub] = arr[lb]; arr[lb] = tmp; } }}

// ==================== akhir dari prosedur ====================

Page 17: Algoritma dan Struktur Data - Merge Sort

Kode C++ - lanjutan 3 (main)#include <iostream>

using namespace std;

int main() { int numbers[] = { 8, 40, 1, 5, 0, 9, 6, 4, 3, -1, 5 }; mergeSort(numbers, 0, 10); for (int i=0; i<10; i++) { cout << numbers[i]; cout << “ | “; }}

Page 18: Algoritma dan Struktur Data - Merge Sort

Kompleksitas

Worst Case O(n log n)

Best Case O(n)

Average Case O(n log n)