Algoritma Sorting & Searching

download Algoritma Sorting & Searching

of 28

  • date post

    13-Aug-2015
  • Category

    Documents

  • view

    98
  • download

    7

Embed Size (px)

description

Algoritma Sorting & Searching

Transcript of Algoritma Sorting & Searching

0454TAlgoritma dan Metode Object Oriented Programming

LECTURE NOTES

Algoritma Sorting & Searching

Suharjito, S.Si, MT. e-mail: harjito@yahoo.com

0454TAlgoritma dan Metode Object Oriented Programming

LEARNING OUTCOMES

1. Mahasiswa dapat menerapkan algortima sorting dan searching dengan program C++ 2. Mahasiswa dapat mendemonstrasikan algoritma sorting dasar (bubble sort, selection sort, insertion sort) untuk pengurutan data 3. Mahasiswa dapat menggunakan algoritma quick sort dan merge sort untuk mengurutkan data 4. Mahasiswa dapat menjelaskan algoritma searching (sequential, binary dan interpolation)

OUTLINE MATERI : 1. Definisi sorting 2. Algoritma sorting dasar 3. Algoritma sorting lanjut 4. Definisi searching 5. Algoritma searching

0454TAlgoritma dan Metode Object Oriented Programming

ISI

SORTING ALGORITHMMacam-macam Sorting Algorithm: 1. Selection Sort 2. Bubble Sort 3. Insertion Sort 4. Merge Sort 5. Quick Sort

Selection Sort (Ascending): Pengurutan dilakukan dengan memilih elemen terbesar dan menempatkan pada posisinya, kemudian mencari element terbesar berikutnya dan menempatkan pada tempatnya, dan seterusnya. Algoritmanya: 1. 2. 3. 4. Cari data yang paling besar pada array. Tukarkan nilai terbesar tersebut dengan nilai array pada posisi paling akhir. Abaikan posisi terakhir dengan nilai terbesarnya dan cari nilai terbesar dari array sisanya. Proses dilanjutkan sampai ditemukan dan ditukarkan N-1 dari N elemen array.

0454TAlgoritma dan Metode Object Oriented Programming

Contoh proses Selection Sort pada array 5 bilangan Integer:

Initial Array: After 1st swap: After 2nd swap: After 3rd swap: After 4th swap:

29 29 13 13 10

10 10 10 10 13

14 14 14 14 14

37 13 29 29 29

13 37 37 37 37

Kotak yang diarsir adalah kotak yang dipilih, sedangkan elemen yang di bold adalah yang sudah terurut pada posisinya.

// Sort the item in an array into ascending order void SelectionSort(dataType *A, int N) { // Last = index of the last item in the subarray // L = index of the largest item found for (int Last = N-1; Last >= 1; --Last) { // Select the largest item in A[0, , Last] int L = IndexOfLargest( A, Last+1); // Swap largest item A[L] with A[Last] Swap( A[L], A[Last] ); } }

0454TAlgoritma dan Metode Object Oriented Programming

// Find the largest item in the array int IndexOfLargest( const dataType *A, int Size ) { int indexLargest = 0; for ( int index = 1; index < Size; ++index ) { if (A[index] >= A[indexLargest] idexLargest = index; } return indexLargest; }

// Swaps X and Y void Swap( dataType& X, dataType& Y) { dataType temp = X; X = Y; Y = temp; }

Insertion Sort: Insertion membagi array menjadi dua bagian yaitu wilayah sorted dan wilayah unsorted: awalnya, daerah sorted adalah A[0], dan daerah unsorted adalah A[1, N-1]. Ambil elemen pada daerah unsorted dan sisipkan pada posisi yang benar pada daerah sorted.

0454TAlgoritma dan Metode Object Oriented Programming

Setelah iterasi ke i, daerah sorted adalah A[0, i], dan daerah unsorted adalah A[i+1, N-1].

Pada setiap langkah daerah sorted bertambah satu dan daerah unsorted berkurang satu.

Sorted

Unsorted

0

i

N-1

Proses Insertion Sort pada array 5 bilangan integer:

Initial

29 29 10 10 10 10 10

10 29 29 29 14 14 14 13

14 14 14 29 29 29 14 14

37 37 37 37 37 37 29 29

13 13 13 13 13 13 37 37

Copy 10 Shift 29 Insert 10, Copy 14 Shift 29 Insert 14, Copy 37, Insert 37 on top of itself Copy 13 Shift 14, 29, 37 Insert 13

Sorted

10

0454TAlgoritma dan Metode Object Oriented Programming

Fungsi Insertion sort pada array dengan N elemen: void InsertionSort( dataType *A, int N) { // Unsorted = index pertama dari array unsorted // Loc = index of insertion in the sorted region // NextItem = next item in the unsorted region for (int Unsorted = 1; Unsorted < N; ++ Unsorted) { dataType NextItem = A[Unsorted]; int Loc = Unsorted; for (; (Loc > 0) && (A[Loc-1]) > NextItem; --Loc) A[Loc] = A[Loc-1]; // Insert NextItem into sorted region A[Loc] = NextItem; } }

Bubble Sort: Bubble sort dilakukan dengan membandingkan dua elemen yang bendampingan dan menukarkannya jika kedua elemen tersebut belum terurut. Pengurutan ini biasanya memerlukan banyak passing terhadap datanya. Pada passing pertama dibandingkan data pertama dan kedua kemuidan data ditukarkan jika belum terurut, selanjutnya dibandingkan pasangan data selanjutnya yaitu data kedua dan ketiga dan ditukarkan jika belum terurut. Proses dilanjutkan sampai pada pasangan terakhir dari array.

0454TAlgoritma dan Metode Object Oriented Programming

Pass 1: Initial Array:

29 10 10 10 10

10 29 14 14 14

14 14 29 29 29

37 37 37 37 13

13 13 13 13 37

Pass 2:

10 10 10 10

14 14 14 14

29 29 29 13

13 13 13 29

37 37 37 37

Pass 3:

10 10 10

14 14 13

13 13 14

29 29 29

37 37 37

0454TAlgoritma dan Metode Object Oriented Programming

C++ fungsi BubbleSort untuk mengurutkan array N elemen secara Ascending:

void BubbleSort( dataType *A, int N) { enum boolean {FALSE, TRUE}; boolean Sorted = FALSE; for (int Pass = 1; (Pass < N) && !Sorted; ++Pass) { Sorted = TRUE; for (int Index = 0; Index < N-Pass; ++Index) { int NextIndex = Index + 1; if (A[Index] > A[NextIndex]) { // exchange item Swap( A[Index], A[NextIndex] ); Sorted = FALSE; } // end if } // end for } // end for }

0454TAlgoritma dan Metode Object Oriented Programming

MERGE SORTMerge sort merupakan algoritma pengurutan recursive yang selalu memberikan unjuk kerja yang sama. Mergesort dilakukan dengan membagi array menjadi dua bagian, kemudian mengurutkan tiap bagian dan menggabungkan keduanya menjadi satu array terurut. Mergesort dapat dijelaskan dengan gambar sebagai berikut:

8 1 4

1 8

4

3

2 2 3

Divide the array in half Sort the halves

Merge the halves a TempArr 1 b 2 3 c 4 d 8 Copy TempArr into original array 1 2 3 4 8

Merge the halves pada gambar di atas dilakukan dengan: 1. 1 < 2, maka inputkan 1 dari left half ke dalam TempArr 2. 4 > 2, maka inputkan 2 dari left half ke dalam TempArr. 3. 4 > 3, maka inputkan 3 dari right half ke dalam TempArr 4. Right half selesai, maka inputkan sisa elemen pada left half ke TempArr.

0454TAlgoritma dan Metode Object Oriented Programming

Pseudocode dari Mergesort adalah: Mergesort (A, F, L) // Sorts A[F L] by // // // 1. Sorting the first half of the array 2. Sorting the second half of the array 3. Merging the two sorted halves

if (F < L) { Mid = (F + L )/2 Mergesort(A, F, Mid) // get the midpoint // sort A[F Mid]

Mergesort(A, Mid+1, L) // sort A[Mid+1 L] // merge the sorted A[F Mid] and A[Mid+1 L] Merge(A, F, Mid, L) } else quit

0454TAlgoritma dan Metode Object Oriented Programming

Bentuk recursive dari mergesort:

38 38 38 38 16 16 16 16 38 27 12 16

16 27 27

27

39

12 39 39 39 12

27 12 27 27 Recursive calls to Mergesort

12 12 39 12 27 39

38 16 27 27 38

Merge steps

39

Program C++ dari Mergesort adalah: void Mergesort(dataType *A, int F, int L) { if (F < L) { int Mid = (F + L)/2; Mergesort(A, F, Mid); Mergesort(A, F, Mid); Merge(A, F, Mid, L); } } // index of midpoint // sorted the left half // sorted the right half // merge the two halves

0454TAlgoritma dan Metode Object Oriented Programming

void Merge(dataTye *A, int F, int Mid, int L) { dataType TempArr[MAX_SiZE]; // temporary array // inisialisasi index local dari subarray int First1 = F; int Last1 = Mid; int First2 = Mid+1; int Last2 = L; int Index = First1; for (; (First1