Tujuan Searching & Sorting Pertemuan 9-10 Dosen Pembina Danang Junaedi TUJUAN MATERI Setelah mengikuti materi pertemuan ini, mahasiswa diharapkan dapat 1. Menjelaskan dan menggunakan metode pencarian dalam menyelesaikan masalah pencarian data/informasi pada Kondisi data yang tidak terurut Kondisi data terurut 2. Menjelaskan dan menggunakan metode untuk mengurutkan data/informasi dalam menyelesaikan masalah pegurutan data/informasi Jurusan Teknik Informatika IX/XII - 2 Universitas Widyatama Lingkup Materi 1. Pencarian pada Data yang Tidak Terurut a. Sequential dengan variabel logika b. Sequential tanpa variabel logika c. Sentinel 2. Pencarian pada Data yang Terurut a. Sequential tanpa variabel logika b. Binary search/dikotomik 3. Sorting a. Bubble Sort b. Selection Sort c. Insertion Sort Searching (1) Tujuan : mencari suatu nilai/elemen dalam kumpulan nilai (yang disimpan dalam array, list atau file) yang sudah diketahui Jenis Searching pada Data Tidak Terurut Sequential Search Searching pada Data Terurut Sequential Search Binary Search/Pencarian Bagi Dua/ Dikotomik Search Jurusan Teknik Informatika IX/XII - 3 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 4 Universitas Widyatama SEQUENTIAL SEARCH Pencarian pada Data yang Tidak Terurut Disini proses pencarian dilakukan secara beruntun dari data pertama sampai data terakhir. Pencarian pada Data yang Terurut Disini proses pencarian dapat dilakukan secara berurutan dari data pertama sampai data terakhir atau tidak berurutan. Masalah : Diketahui sebuah array A[1..10] yang berisi data integer dengan kondisi tidak terurut. Buat algoritma untuk mencari nilai X dan beri pesan ditemukan atau tidak nilai tersebut Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut 5 10 11 2 8 13 7 20 35 18 Pencarian dilakukan sampai dengan posisi akhir pada array atau data ditemukan Jurusan Teknik Informatika IX/XII - 5 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 6 Universitas Widyatama 1
Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut Kamus : ARRAY A[1..10] = array yang menampung data dalam tabel X = integer, variabel yang menampung data yang akan dicari INPUT X, I 1 WHILE (I < 10) AND ( A[I] <> X) DO I I + 1 OUTPUT Tidak ditemukan Jurusan Teknik Informatika IX/XII - 7 Universitas Widyatama Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut Pencarian dilakukan selama nilai dalam array < nilai yang dicari Jurusan Teknik Informatika IX/XII - 8 Universitas Widyatama Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut Pencarian dilakukan selama nilai dalam array < nilai yang dicari Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut Judul : Algoritma untuk mencari nilai X Kamus : ARRAY A[1..10] = array yang menampung data INPUT X, I 1 WHILE (A[I] < X) and (I <= 10) DO I I+1 OUTPUT Tidak ketemu Jurusan Teknik Informatika IX/XII - 9 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 10 Universitas Widyatama Searching (2) Sequential Search Tanpa Variabel Logika Data Tidak Terurut while (i <= N && Cari!= Barang[i]) i++; (i < N)? printf("barang ditemukan") : printf("barang tidak Data Terurut while (i <= N && Cari < Barang[i]) i++; (Barang[i] == Cari)? printf("barang ditemukan") : printf("barang tidak Jurusan Teknik Informatika IX/XII - 11 Universitas Widyatama Sequential Search (Dengan Variabel Logika) untuk kondisi data tidak terurut 5 10 11 2 8 13 7 20 35 18 Keadaan awal : Found False, I 1 Pencarian dilakukan sampai dengan posisi akhir pada array atau data ditemukan Found False, berarti nilai yang dicari tidak ketemu Found True, berarti nilai yang dicari ketemu Jurusan Teknik Informatika IX/XII - 12 Universitas Widyatama 2
Sequential Search (Dengan Variabel Logika) untuk kondisi data tidak terurut Kamus : ARRAY A[1..10] = array yang menampung data dalam tabel Found = boolean, variabel logika untuk mengetahui ketemu/tidak nilai yang akan dicari INPUT X, I 1, Found False WHILE (I <= 10) AND ( Not Found) DO Found True I I+1 ENDIF IF Found THEN OUTPUT Tidak ditemukan Jurusan Teknik Informatika IX/XII - 13 Universitas Widyatama Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut Keadaan awal : Found False, I 1 Pencarian dilakukan selama nilai dalam array < nilai yang dicari Found False, berarti nilai yang dicari tidak ketemu Found True, berarti nilai Jurusan Teknik Informatika IX/XII - 14 Universitas Widyatama Sequential Search (Dengan Variabel Logika) untuk kondisi data terurut Kamus : ARRAY A[1..10] = array yang menampung data dalam tabel Found = boolean, variabel logika untuk mengetahui ketemu/tidak nilai yang akan dicari INPUT X, I 1, Found False WHILE (I <= 10) AND ( Not Found) AND (A[I] < X) DO Found True I I+1 ENDIF IF Found THEN OUTPUT Tidak ditemukan Jurusan Teknik Informatika IX/XII - 15 Universitas Widyatama Searching (2) Sequential Search Dengan Variabel Logika Data Tidak Terurut ketemu = 0; while (i <= N && ketemu == 0) (Cari == Barang[i])? ketemu = 1: i++; (ketemu == 1)? printf("barang ditemukan") : printf("barang tidak Data Terurut Ketemu = 0; while (i <= N && Cari < Barang[i] && ketemu ==0) (Cari == Barang[i])? ketemu = 1: i++; (ketemu == 1)? printf("barang ditemukan") : printf("barang tidak Jurusan Teknik Informatika IX/XII - 16 Universitas Widyatama Sequential Search (Sentinel) untuk kondisi data tidak terurut 5 10 11 2 8 13 7 20 35 18 Sentinel di awal Pencarian dilakukan sampai dengan posisi sentinel. Jika menggunakan sentinel di awal pencarian dilakukan dari posisi paling belakang ke depan, sebaliknya jika menggunakan sentinel di akhir pencarian dilakukan dari depan ke belakang Sentinel di akhir I akan diisi nomor indeks yang array-nya bernilai X, namun apabila I bukan sentinel berarti nilai X ditemukan Jurusan Teknik Informatika IX/XII - 17 Universitas Widyatama Sequential Search (Sentinel) untuk kondisi data tidak terurut Sentinel adalah elemen fiktif yang dipasang setelah elemen terakhir atau di awal table Kamus : ARRAY A[1..11] = array yang menampung data dalam tabel Found = boolean, variabel logika INPUT X, I 1, A[11] X Sentinel di akhir WHILEA[I] <> X DO I I + 1 IF I <> 11 THEN OUTPUT Tidak ketemu Jurusan Teknik Informatika IX/XII - 18 Universitas Widyatama 3
Sequential Search (Sentinel) untuk kondisi data terurut Sentinel di awal Pencarian dilakukan selama nilai dalam array < nilai pada posisi sentinel. Jika menggunakan sentinel di awal pencarian dilakukan dari posisi paling belakang ke depan, sebaliknya jika menggunakan sentinel di akhir pencarian dilakukan dari depan ke belakang Sentinel di akhir I akan diisi nomor indeks yang array-nya bernilai X, namun apabila I bukan sentinel berarti nilai X ditemukan Jurusan Teknik Informatika IX/XII - 19 Universitas Widyatama Sequential Search (Sentinel) untuk kondisi data terurut Sentinel adalah elemen fiktif yang dipasang setelah elemen terakhir atau di awal table Kamus : ARRAY A[1..11] = array yang menampung data dalam tabel Found = boolean, variabel logika INPUT X, I 1, A[11] X Sentinel di akhir WHILEA[I] < A[11] DO I I + 1 IF I <> 11 THEN OUTPUT Tidak ketemu Jurusan Teknik Informatika IX/XII - 20 Universitas Widyatama Searching (2) Sequential Search Dengan Sentinel di awal Data Tidak Terurut i = N; j=0; scanf( %d,&barang[j]); while (i >= 1 && Barang[i]!= Barang[j]) i- -; (i >= 1)? printf("barang ditemukan") :printf("barang tidak Data Terurut i = N; j=0; scanf( %d,&barang[j]); while (i >= 1 && Barang[i] < Barang[j]) i- -; (i >= 1)? printf("barang ditemukan") :printf("barang tidak Binary Search (Pencarian Bagi Dua) Merupakan metode pencarian yang diterapkan pada kumpulan data yang telah terurut (terurut menaik atau terurut menurun), yang merupakan syarat mutlak dari proses pencarian yang menggunakan metode ini. Pencarian dilakukan dengan membagi dua larik yang sudah terurut, hal ini dilakukan sampai data tersebut ditemukan (nilai yang dicari adalah nilai yang di tengah) Ilustrasi metode Binary Search : Terdapat suatu larik A yang sudah terurut, dan akan dicari suatu nilai tertentu pada larik tersebut, misalnya nilai X. Jurusan Teknik Informatika IX/XII - 21 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 22 Universitas Widyatama Binary Search (Pencarian Bagi Dua Merupakan metode pencarian yang diterapkan pada kumpulan data yang telah terurut (terurut menaik atau terurut menurun), yang merupakan syarat mutlak dari proses pencarian yang menggunakan metode ini. Pencarian dilakukan dengan membagi dua larik yang sudah terurut, hal ini dilakukan sampai data tersebut ditemukan (nilai yang dicari adalah nilai yang di tengah) Ilustrasi metode Binary Search Terdapat suatu larik A yang sudah terurut, dan akan dicari suatu nilai tertentu pada larik tersebut, misalnya nilai X Langkah pertama : bagi dua larik A, yaitu : Tengah = (Kiri + Kanan)/2 Langkah kedua : bandingkan data yang dicari (misal : X) dengan data larik A[Tengah] Jika X = A[Tengan], pencarian dihentikan (ketemu). Jika X > A[T], pencarian dilakukan pada posisi sebelah kanan. Ubah nilai Kiri menjadi nilai Tengah (Kiri = Tengah), ulangi langkah pertama sampai data ditemukan Jika X < A[T], pencarian dilakukan pada posisi sebelah kiri. Ubah nilai Kanan menjadi nilai Tengah (Kanan =Tengah), ulangi langkah pertama sampai data ditemukan Jurusan Teknik Informatika IX/XII - 23 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 24 Universitas Widyatama 4
Binary Search kiri = 0; Searching (3) kanan = N-1; ketemu = 0; while (kiri < kanan && ketemu == 0) tengah = (kiri + kanan) / 2; if (Barang[tengah] == Cari) ketemu = 1; else (Barang[tengah]< Cari)? kiri = tengah + 1 :kanan = tengah - 1; (ketemu == 1)? printf("barang ditemukan") :printf("barang tidak SORTING (PENGURUTAN) DEFINISI PENGURUTAN Pengurutan (Sorting) adalah suatu proses untuk mengatur sekumpulan data atau objek menurut susunan atau urutan tertentu. Dibedakan menjadi 2 macam, yaitu : Pengurutan Internal yaitu pengurutan terhadap sekumpulan data yang disimpan dalam media internal komputer, yang dapat diakses setiap elemennya secara langsung dan disebut juga sebagai pengurutan tabel. Pengurutan Eksternal, yaitu pengurutan data yang disimpan dalam memori sekunder, biasanya data berukuran besar sehingga tidak mampu untuk dimuat semuanya dalam memori komputer disebut juga pengurutan arsip (file). Jurusan Teknik Informatika IX/XII - 25 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 26 Universitas Widyatama Sorting (1) Tujuan : menyusun nilai/elemen (biasanya dalam array atau file) sedemikian rupa berdasarkan aturan tertentu (ascending/descending) Jenis Internal Sorting Selection Sort Bubble Sort Insertion Sort Eksternal Sorting Maksimum-minimum Sort (Selection Sort) Didasarkan pada pemilihan elemen maksimum atau minimum larik sebagai basis pengurutan. Gagasannya adalah memilih elemen maksimum/minimum tersebut dengan elemen terujung larik (ujung kiri atau ujung kanan). Selanjutnya elemen terujung tersebut di-isolasi dan tidak disertakan pada proses selanjutnya. Proses yang sama diulang untuk elemen larik yang tersisa sampai larik terurut. Jurusan Teknik Informatika IX/XII - 27 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 28 Universitas Widyatama Maksimum Sort : Ilustrasi Pengurutan : Secara Ascending(terurut dari kecil ke besar) 65 20 5 30 85 40 data asal 65 20 5 30 40 85 langkah 1 40 20 5 30 65 85 langkah 2 30 20 5 40 65 85 langkah 3 5 20 30 40 65 85 langkah 4 5 20 30 40 65 85 langkah 5 Ilustrasi pengurutan : Secara Descending (terurut dari besar ke kecil) 65 20 5 30 85 40 data asal 85 20 5 30 65 40 langkah 1 85 65 5 30 20 40 langkah 2 85 65 40 30 20 5 langkah 3 85 65 40 30 20 5 langkah 4 85 65 40 30 20 5 langkah 5 dan sebaliknya dapat dilakukan untuk Mimimum Sort [Coba lakukan!] Jurusan Teknik Informatika IX/XII - 29 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 30 Universitas Widyatama 5
Sorting (2) Selection Sort menggunakan nilai minimum for(i=0;i<n-1;i++) min=i; for(j=i+1;j<n;j++) if(barang[j] < Barang[min]) min = j; Temp = Barang[min]; Barang[min] = Barang[i] Barang[i] = Temp; Bubble Sort Metode ini menggunakan prinsip pengapungan (diinspirasi oleh gelembung sabun yang berada di atas permukaan air). Elemen larik yang berharga paling kecil diapungkan, artinya diangkat keatas (atau ujung kiri larik) melalui proses pertukaran. Proses pengapungan ini dilakukan sampai larik terurut. Jurusan Teknik Informatika IX/XII - 31 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 32 Universitas Widyatama Ilustrasi Bubble Sort : 15 25 2 7 1 sebelum pengurutan 15 25 2 1 7 15 25 1 2 7 langkah 1 15 1 25 2 7 1 15 25 2 7 1 15 25 2 7 1 15 25 2 7 langklah 2 1 15 2 25 7 1 2 15 25 7 1 2 15 7 25 1 2 15 7 25 langkah 3 1 2 7 15 25 1 2 7 15 25 langkah 4 1 2 7 15 25 hasil pengurutan Bubble Sort Sorting (3) for(i=0;i<n-1;i++) for(j=n-1;j>=i;j--) if(barang[j] < Barang[j-1]) //proses pertukaran Temp = Barang[j]; Barang[j] = Barang[j-1]; Barang[j-1] = Temp; Jurusan Teknik Informatika IX/XII - 33 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 34 Universitas Widyatama Insertion Sort Merupakan metode pengurutan dengan cara menyisipkan elemen larik pada posisi yang tepat. Pencarian posisi ini dilakukan secara sequential. Selama pencarian posisi ini, dilakukan pergeseran elemen larik. Ilustrasi Insertion Sort : (untuk menghasilkan data terurut dari kecil ke besar) 29 27 10 8 76 21 data asal 27 29 10 8 76 21 langkah 1 10 27 29 8 76 21 langkah 2 8 10 27 29 76 21 langkah 3 8 10 27 29 76 21 langkah 4 8 10 21 27 29 76 langkah 5 Jurusan Teknik Informatika IX/XII - 35 Universitas Widyatama Insertion Sort Sorting (4) for(i=1;i<n;i++) Temp = Barang[i] j=i-1; Ketemu = 0; while (j>=0 && Ketemu == 0) if(temp < Barang[j]) Barang[j+1] = Barang[j]; j--; else Ketemu = 1; Barang[j+1] = Temp; Jurusan Teknik Informatika IX/XII - 36 Universitas Widyatama 6