You are on page 1of 6

11/11/2010

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
IX/XII - 2 Universitas Widyatama

Jurusan Teknik Informatika

Lingkup Materi
1.
a. b. c.

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

Pencarian pada Data yang Tidak Terurut


Sequential dengan variabel logika Sequential tanpa variabel logika Sentinel

2.

Pencarian pada Data yang Terurut


a. b.

Sequential tanpa variabel logika Binary search/dikotomik Bubble Sort Selection Sort Insertion Sort

3.

Sorting
a. b. c.

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

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : I 1

Pencarian dilakukan sampai dengan posisi akhir pada array atau data ditemukan Keadaan Akhir : I akan diisi nomor indeks yang array-nya bernilai X, bila nilai yang dicari ketemu

Jurusan Teknik Informatika

IX/XII - 5

Universitas Widyatama

Jurusan Teknik Informatika

IX/XII - 6

Universitas Widyatama

11/11/2010

Sequential Search (Tanpa Variabel Logika) untuk kondisi data tidak terurut
: Algoritma untuk mencari bilangan X : ARRAY A[1..10] = array yang menampung data dalam tabel I = integer, counter pengulangan X = integer, variabel yang menampung data yang akan dicari Algoritma : INPUT X, I 1 WHILE (I < 10) AND ( A[I] <> X) DO I I+1 END WHILE IF A[I] = X THEN OUTPUT Ditemukan di elemen ke-,I ELSE OUTPUT Tidak ditemukan END IF
Jurusan Teknik Informatika IX/XII - 7 Universitas Widyatama

Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut 2 5 7 8 10 11 13 18 20 35

Judul Kamus

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : I 1

Pencarian dilakukan selama nilai dalam array < nilai yang dicari Keadaan Akhir : I akan diisi nomor indeks yang array-nya bernilai X, bila nilai yang dicari ketemu

Jurusan Teknik Informatika

IX/XII - 8

Universitas Widyatama

Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut 2 5 7 8 10 11 13 18 20 35

Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut


: Algoritma untuk mencari nilai X : ARRAY A[1..10] = array yang menampung data I = integer, counter pengulangan X = integer, variabel yang menampung data yang akan dicari Algoritma : INPUT X, I 1 WHILE (A[I] < X) and (I <= 10) DO I I+1 END WHILE IF A[I] = X THEN OUTPUT Ditemukan di elemen ke-,I ELSE OUTPUT Tidak ketemu END IF Judul Kamus
Jurusan Teknik Informatika IX/XII - 10 Universitas Widyatama

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : I 1

Pencarian dilakukan selama nilai dalam array < nilai yang dicari Keadaan Akhir : I akan diisi nomor indeks yang array-nya bernilai X, bila nilai yang dicari ketemu

Jurusan Teknik Informatika

IX/XII - 9

Universitas Widyatama

Searching (2)
Sequential Search Tanpa Variabel Logika
Data Terurut scanf(%d,&Cari); i = 1; while (i <= N && Cari < Barang[i]) { i++; } (Barang[i] == Cari) ? printf("Barang ditemukan") : printf("Barang tidak ditemukan"); Data Tidak Terurut scanf(%d,&Cari); i = 1; while (i <= N && Cari != Barang[i]) { i++; } (i < N) ? printf("Barang ditemukan") : printf("Barang tidak ditemukan");

Sequential Search (Dengan Variabel Logika) untuk kondisi data tidak terurut 5

10

11

13

20

35

18

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : Found False, I 1

Pencarian dilakukan sampai dengan posisi akhir pada array atau data ditemukan Keadaan Akhir : Found Found False, berarti nilai yang dicari tidak ketemu True, berarti nilai yang dicari ketemu

I akan diisi nomor indeks yang array-nya bernilai X, bila nilai yang dicari ketemu
Jurusan Teknik Informatika IX/XII - 11 Universitas Widyatama Jurusan Teknik Informatika IX/XII - 12 Universitas Widyatama

11/11/2010

Sequential Search (Dengan Variabel Logika) untuk kondisi data tidak terurut
Judul Kamus : Algoritma untuk mencari bilangan X : ARRAY A[1..10] = array yang menampung data dalam tabel I = integer, counter pengulangan X = integer, variabel yang menampung data yang akan dicari Found = boolean, variabel logika untuk mengetahui ketemu/tidak nilai yang akan dicari Algoritma : INPUT X, I 1, Found False WHILE (I <= 10) AND ( Not Found) DO IF A[I] = X THEN Found True ELSE I I+1 ENDIF END WHILE IF Found THEN OUTPUT Ditemukan di elemen ke-,I ELSE OUTPUT Tidak ditemukan END IF
Jurusan Teknik Informatika IX/XII - 13 Universitas Widyatama

Sequential Search (Tanpa Variabel Logika) untuk kondisi data terurut 2 5 7 8 10 11 13 18 20 35

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : Found False, I 1

Pencarian dilakukan selama nilai dalam array < nilai yang dicari Keadaan Akhir : Found False, berarti nilai yang dicari tidak ketemu Found True, berarti nilai yang dicari ketemu I akan diisi nomor indeks yang array-nya bernilai X, bila nilai yang dicari ketemu
Jurusan Teknik Informatika IX/XII - 14 Universitas Widyatama

Sequential Search (Dengan Variabel Logika) untuk kondisi data terurut


Judul Kamus : Algoritma untuk mencari bilangan X : ARRAY A[1..10] = array yang menampung data dalam tabel I = integer, counter pengulangan X = integer, variabel yang menampung data yang akan dicari Found = boolean, variabel logika untuk mengetahui ketemu/tidak nilai yang akan dicari Algoritma : INPUT X, I 1, Found False WHILE (I <= 10) AND ( Not Found) AND (A[I] < X) DO IF A[I] = X THEN Found True ELSE I I+1 ENDIF END WHILE IF Found THEN OUTPUT Ditemukan di elemen ke-,I ELSE OUTPUT Tidak ditemukan END IF
Jurusan Teknik Informatika IX/XII - 15 Universitas Widyatama

Searching (2)
Sequential Search
Data Tidak Terurut scanf(%d,&Cari); i = 1; ketemu = 0; while (i <= N && ketemu == 0){ (Cari == Barang[i]) ? ketemu = 1: i++; } (ketemu == 1) ? printf("Barang ditemukan") : printf("Barang tidak ditemukan");
Jurusan Teknik Informatika

Dengan Variabel Logika


Data Terurut scanf(%d,&Cari); i = 1; Ketemu = 0; while (i <= N && Cari < Barang[i] && ketemu ==0){ (Cari == Barang[i]) ? ketemu = 1: i++; } (ketemu == 1) ? printf("Barang ditemukan") : printf("Barang tidak ditemukan");
Universitas Widyatama

IX/XII - 16

Sequential Search (Sentinel) untuk kondisi data tidak terurut 5 10 11 2 8 13 7 20 35 18


Sentinel di akhir

Sequential Search (Sentinel) untuk kondisi data tidak terurut

{Sentinel adalah elemen fiktif yang dipasang setelah elemen terakhir atau di awal table}
Judul : Algoritma untuk mencari bilangan X Kamus : ARRAY A[1..11] = array yang menampung data dalam tabel I = integer, counter pengulangan X = integer, variabel yang menampung data yang akan dicari Found = boolean, variabel logika Algoritma : INPUT X, I 1, A[11] X {Sentinel di akhir} WHILE A[I] <> X DO I I+1 END WHILE IF I <> 11 THEN OUTPUT Ditemukan di elemen ke-,I ELSE OUTPUT Tidak ketemu END IF
Jurusan Teknik Informatika IX/XII - 18 Universitas Widyatama

Sentinel di awal

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : I 1

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 Keadaan 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

11/11/2010

Sequential Search (Sentinel) untuk kondisi data terurut 2 5 7 8 10 11 13 18 20 35


Sentinel di akhir

Sequential Search (Sentinel) untuk kondisi data terurut

{Sentinel adalah elemen fiktif yang dipasang setelah elemen terakhir atau di awal table}
Judul : Algoritma untuk mencari bilangan X Kamus : ARRAY A[1..11] = array yang menampung data dalam tabel I = integer, counter pengulangan X = integer, variabel yang menampung data yang akan dicari Found = boolean, variabel logika Algoritma : INPUT X, I 1, A[11] X {Sentinel di akhir} WHILE A[I] < A[11] DO I I+1 END WHILE IF I <> 11 THEN OUTPUT Ditemukan di elemen ke-,I ELSE OUTPUT Tidak ketemu END IF
Jurusan Teknik Informatika IX/XII - 20 Universitas Widyatama

Sentinel di awal

Misalnya, terdapat sebuah array seperti di atas Keadaan awal : I 1

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 Keadaan 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

Searching (2)
Sequential Search
Data Tidak Terurut i = N; j=0; scanf(%d,&Barang[j]); while (i >= 1 && Barang[i] != Barang[j]) { ii- -; } (i >= 1) ? printf("Barang ditemukan") :printf("Barang tidak ditemukan");

Binary Search (Pencarian Bagi Dua)

Dengan Sentinel di awal


Data Terurut i = N; j=0; scanf(%d,&Barang[j]); while (i >= 1 && Barang[i] < Barang[j]) {i i- -; } (i >= 1) ? printf("Barang ditemukan") :printf("Barang tidak ditemukan");

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

11/11/2010

Searching (3)
Binary Search
kiri = 0; kanan = NN-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 ditemukan");
Jurusan Teknik Informatika IX/XII - 25 Universitas Widyatama

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 - 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

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.

Eksternal Sorting
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 65 40 30 5 5 20 20 20 20 20 20 5 5 5 5 30 30 30 30 30 40 40 40 85 40 65 65 65 65 40 85 85 85 85 85 data asal langkah 1 langkah 2 langkah 3 langkah 4 langkah 5

Ilustrasi pengurutan : Secara Descending (terurut dari besar ke kecil)

65 85 85 85 85 85

20 20 65 65 65 65

5 5 5 40 40 40

30 30 30 30 30 30

85 65 20 20 20 20

40 40 40 5 5 5

data asal langkah 1 langkah 2 langkah 3 langkah 4 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

11/11/2010

Sorting (2)
Selection Sort menggunakan nilai minimum

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.

for(i=0;i<Nfor(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; }
Jurusan Teknik Informatika IX/XII - 31 Universitas Widyatama

Jurusan Teknik Informatika

IX/XII - 32

Universitas Widyatama

Ilustrasi Bubble Sort :


15 15 15 15 1 1 1 1 1 1 1 1 1 1 25 25 25 1 15 15 15 15 2 2 2 2 2 2 2 2 1 25 25 25 25 2 15 15 15 7 7 7 7 1 2 2 2 2 2 25 25 7 7 15 15 15 1 7 7 7 7 7 7 7 7 25 25 25 25 25 sebelum pengurutan langkah 1

Sorting (3)
Bubble Sort
for(i=0;i<Nfor(i=0;i<N -1;i++) { for(j=Nfor(j=N -1;j>=i;j 1;j>=i;j---) ) { if(Barang[j] < Barang[jBarang[j-1]) { //proses pertukaran Temp = Barang[j]; Barang[j] = Barang[jBarang[j-1]; Barang[jBarang[j -1] = Temp; } } }
IX/XII - 34 Universitas Widyatama

langklah 2

langkah 3 langkah 4 hasil pengurutan

Jurusan Teknik Informatika

IX/XII - 33

Universitas Widyatama

Jurusan Teknik Informatika

Insertion Sort
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 besar) 29 27 10 8 8 8 Insertion Sort : (untuk menghasilkan data terurut dari kecil ke 27 29 27 10 10 10 10 10 29 27 27 21 8 8 8 29 29 27 76 76 76 76 76 29
IX/XII - 35

Sorting (4)
for(i=1;i<N;i++) { Temp = Barang[i] j=ij=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; }
IX/XII - 36 Universitas Widyatama

21 21 21 21 21 76

data asal langkah 1 langkah 2 langkah 3 langkah 4 langkah 5


Universitas Widyatama Jurusan Teknik Informatika

Jurusan Teknik Informatika

You might also like