0% menganggap dokumen ini bermanfaat (0 suara)
48 tayangan21 halaman

Search Dan Sort

Diunggah oleh

novi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
48 tayangan21 halaman

Search Dan Sort

Diunggah oleh

novi
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 21

Modul Struktur Data

BAB 9
Searching and Sorting
1.Tujuan
a. Mampu menjelaskan mengenai algoritma Searching dan sorting
b. Mampu membuat dan mendeklarasikan struktural algoritma Searching
dan sorting
c. Mampu menerapkan dan mengimplementasikan algoritma Searching dan
sorting

Pendahuluan
Dalam ilmu komputer, searching (pencarian) dan sorting (pengurutan) adalah dua
operasi dasar yang sering digunakan dalam pengolahan data.
1.Pencarian (searching)
merupakan aktivitas yang hampir setiap hari dilakukan oleh kebanyakan orang
pemakai komputer maupun gadget dan smartphone.Pencarian data dilakukan
dengan cara menelusuri data-data yang tersimpan di dalam computer. Tempat
pencarian data dapat berupa array, dalam memori, file pada external storage
Pencarian data sering juga disebut table look-up atau storage and retrieval
information:Proses untuk mengumpulkan sejumlah informasi di dalam memory
komputer dan kemudian mencari kembali informasi yang diperlukan.
Algoritma Pencarian Teknik atau cara atau metode yang memiliki sebuah argumen
kunci dan dengan langkah-langkah tertentu akan mencari record (data simpanan)
dengan kunci tersebut.
Dua kemungkinan hasil, yaitu:
a. ditemukan (successful)
b. tidak ditemukan (unsuccessful)
Metode Pencarian
a. Pencarian internal (internal searching):semua record yang diketahui berada
dalam memory computer.
b. Pencarian eksternal (external searching):Tidak semua record yang diketahui
berada dalam memory komputer, tetapi ada sejumlah rekaman yang tersimpan
dalam penyimpan luar misalnya pita atau cakram magnetis.
Modul Struktur Data

c. Pencarian statis (static searching):banyaknya rekaman yang diketahui dianggap


tetap
d. Pencarian dinamis (dynamic searching):banyaknya rekaman yang diketahui bisa
berubah-ubah yang disebabkan oleh penambahan atau penghapusan suatu record.
Algoritma Pencarian Yang Sering Digunakan ;
a. Sequential Search (Linear Search)
Merupakan teknik yang sederhana dan langsung dapat digunakan pada struktur
data baik array maupun linked-list.Pencarian data secara urut mulai dari data
pertama sampai kunci yang dicari ditemukan atau sampai seluruh data telah dicari
dan tidak ditemukan.dapat dilakukan pada data yang tidak terurut. Disebut juga
linear search atau Metode pencarian beruntun.Tidak efisien untuk data yang list
yang besar . suatu teknik pencarian data yang akan menelusuri tiap elemen satu
per-satu dari awal sampai akhir. Data awal = tidak harus dalam kondisi
terurut.Kemungkinan data yang bisa muncul di sequential Search :
Kemungkinan terbaik (best case):jika data yang dicari terletak di indeks array
terdepan (elemen array pertama), sehingga waktu yang dibutuhkan untuk pencarian
menjadi lebih cepat
Kemungkinan terburuk (worst case):jika data yang dicari terletak di indeks array
terakhir (elemen array terakhir), sehingga waktu yang dibutuhkan untuk pencarian
data lebih lama (maksimal)
Algortima Seqential Search:
1.Input x (data yang dicari)
2. Bandingkan x dengan data ke-i sampai n
3. Jika ada data yang sama dengan x maka cetak pesan “Ada”
4. Jika tidak ada data yang sama dengan x cetak pesan “tidak ada”.
Ilustrasi Sequential Search :
1.Misalnya terdapat array satu dimensi sebagai berikut:
Indeks

0 1 2 3 4 5 6

6 -3 7 8 9 2 1
Value

Modul Strukutur Data

a.Kemudian program akan meminta data yang akan dicari, misalnya 8(x = 8).
b. Iterasi : 8= 6 (tidak!)
8=-3 (tidak!)
8=7 (tidak!)
8=8 (Ya!) => output : “Ada” pada index ke-3
c.Jika sampai data terakhir tidak ditemukan data yang sama maka output : “ data
yang dicari tidak ada”.
Program dalam Bahasa c++:
Output Program:
Jika data yang dicari ada pada indeks
Jika Angka yang dicari tidak ada Pada Value.

Modul Struktur Data

2.Misalnya terdapat array dua dimensi sebagai berikut:

Baris

3 5 9
6 7 -3
1 2 8

Kolom
a. Kemudian program akan meminta data yang akan dicari ,Misalnya x=9.
b. 1.Iterasi pertama (Baris ke-0):
Memeriksa elemen pertama pada baris 0, yaitu arr[0][0] = 3
8 != 3 → Output: 8 = 3 (Tidak!)
Memeriksa elemen kedua pada baris 0, yaitu arr[0][1] = 5
8 != 5 → Output: 8 = 5 (Tidak!)
Memeriksa elemen ketiga pada baris 0, yaitu arr[0][2] = 9
8 != 9 → Output: 8 = 9 (Tidak!)
Pada akhir iterasi pertama, data tidak ditemukan di baris 0.
2. Iterasi kedua (Baris ke-1):
Memeriksa elemen pertama pada baris 1, yaitu arr[1][0] = 6
8 != 6 → Output: 8 = 6 (Tidak!)
Memeriksa elemen kedua pada baris 1, yaitu arr[1][1] = 7
8 != 7 → Output: 8 = 7 (Tidak!)
Memeriksa elemen ketiga pada baris 1, yaitu arr[1][2] = -3
8 != -3 → Output: 8 = -3 (Tidak!)
Pada akhir iterasi kedua, data juga tidak ditemukan di baris 1.
3.Iterasi ketiga (Baris ke-2):
Memeriksa elemen pertama pada baris 2, yaitu arr[2][0] = 1
Modul Struktur Data

8 != 1 → Output: 8 = 1 (Tidak!)
Memeriksa elemen kedua pada baris 2, yaitu arr[2][1] = 2
8 != 2 → Output: 8 = 2 (Tidak!)
Memeriksa elemen ketiga pada baris 2, yaitu arr[2][2] = 8
8 == 8 → Output: 8 = 8 (Ya!) => data ditemukan pada indeks [2][2].
c. Jika sampai data terakhir tidak ditemukan data yang sama maka output : “
data yang dicari tidak ada”.
Program dalam Bahasa c++:
Modul Struktur Data
Ouput Program:
Jika angka yang dicari ada pada array 2 dimensi:

Jika angka yang dicari tidak ada pada array 2 Dimensi:

b. Binary Search
Metode pencarian yang kedua adalah binary search, pada metode pencarian ini,
data harus diurutkan terlebih dahulu. Pada metode pencarian ini, data dibagi .
menjadi dua bagian (secara logika), untuk setiap tahap pencarian.Syarat pencarian
biner data harus sudah dalam keadaan terurut. jika tidak,Maka harus Dilakukan
proses pengurutan terlebih dahulu.Contoh dalam kehidupan sehari -hari dalam
pencarian biner misalnya pencarian kata dalam kamus digital. Kemungkinan data
yang bisa muncul di Binary Search:
Kemungkinan Terbaik (best case): Best case terjadi ketika elemen yang dicari
berada di posisi tengah array pada iterasi pertama.Dalam hal ini, algoritma akan
segera menemukan elemen yang dicari tanpa perlu melanjutkan pencarian lebih
lanjut.Kompleksitas Waktu: O(1) (hanya membutuhkan satu perbandingan).

Modul Struktur Data


Kemungkinan Terburuk (worst case): Worst case terjadi ketika elemen yang dicari
tidak ada dalam array atau berada di salah satu ujung array. Dalam hal ini,
pencarian harus memeriksa hampir seluruh array untuk menentukan bahwa elemen
tidak ada
atau untuk menemukannya.Proses pencarian akan terus membagi array menjadi
dua bagian hingga hanya satu elemen yang tersisa, atau hingga kita menemukan
elemen yang dicari.
Algoritma binary search :
1.Data diambil dari posisi 1 sampai posisi akhir N
2.Kemudian cari posisi data tengah dengan rumus: (posisi awal + posisi akhir) / 2
3. Kemudian data yang dicari dibandingkan dengan data yang di tengah, apakah
sama atau lebih kecil, atau lebih besar?
4. Jika lebih besar, maka proses pencarian dicari dengan posisi awal adalah posisi
tengah+1
5. Jika lebih kecil, maka proses pencarian dicari dengan posisi akhir adalah posisi
tengah–1
6. Jika data sama”data ditemukan di indeks” jika tidak sama ”Data yang dicari
tidak ada”
Ilustrasi Binary Search:

Awal Data Akhir


0 1 2 3 4
2 4 5 7 9

Data yang dicari (x= 2)


a. Data Tengah:(0+4)/2=2.Yang berarti nilai tengah ada di dara 2.
b, Kemudian data yang dicari yang ditampung di variabel x dibandingkan dengan
data/nilai yang berada di data tengah. data yang dicari ialah 2<5.Kemudian

pencarian data dilakukan di bagian kiri Tengah.


c. Pencarian di bagian kiri data Tengah masih dalam perulangan yang sama,
namun indeksnya yang dipersempit. Karena data yang dicari lebih kecil dari data
Tengah yang sebelumnya maka posisi high yang berubah yaitu (tengah - 1) yang
sebelumnya dan low tetap pada posisi yang sama.
0 1
2 4
c.data Tengah: (0+1)/2=0. artinya data Tengah sekarang terletak di data[0]. lalu
data yang dicari dibandingkan dengan data tengah . 2=2 artinya data ditemukan di
indeks.
Program dalam Bahasa C++:
Modul Struktur Data
Output Program:
Jika Data ditemukan Pada Indeks

Jika data yang dicari tidak ada

Modul Struktur Data


c. Interpolitan Search
Hampir sama dengan proses pencarian binary dimana syarat pencarian bisa
dilakukan pada kumpulan data yang sudah urut.Akan tetapi jika pada binary search
harus membagi data menjadi 2 bagian tiap prosesnya, teknik pencarian interpolasi
dilakukan dengan perkiraan letak data.Contoh ilustrasinya mencari suatu nama di
dalam buku telepon berawalan dengan huruf T, maka tidak akan mencarinya dari
awal buku, tetapi langsung membukanya pada 2/3 atau 4 dari tebal buku.
Kemungkinan Terburuk:terjadi ketika data dalam array tidak terdistribusi secara
merata atau sangat miring (misalnya, array yang terurut namun ada banyak elemen
dengan nilai yang sama atau hampir sama).
 Dalam hal ini, rumus interpolasi akan menghasilkan perkiraan posisi yang
buruk, yang mengakibatkan pencarian yang lambat dan bahkan dapat
memakan waktu lebih lama dibandingkan Linear Search.
 Kompleksitas Waktu: O(n) dalam kasus terburuk, di mana n adalah jumlah
elemen dalam array, jika distribusi data tidak merata atau jika array sangat
miring.

Untuk menentukan Posisi Berikutnya dalam metode interpolasi dengan


menggunakan Rumus:
Kunci−data [low ]
Posisi= data [ h ig h ] −data [low] x(high-low)+low
Kunci:data yang dicari
Data[low]:data pada indeks awal
Data[high]:data pada indeks akhir
High atau low:indeks awal atau akhir
Jika data[posisi]==keyword==>data ditemukan
Jika data[posisi]>data yang dicari,high=pos-1
Jika data[posisi]<data yang dicari,low=pos+1
Ilustrasi Interpolitan Search:
Data harus dalam keadaan urut:
0 1 2 3 4 5 6 7 8
2 5 7 8 9 11 14 17 19
Keyword/Kunci:8
Low High Posisi
0 8 (8-2)/(19-2)x(8-0)+0=2.82=2
Indeks ke-2 =7 Bandingkan Keyword 8>7 data [posisi] lebih kecil
Karna data [posisi] < data keyword Low = pos+1 2+1
3 8 (8-8)/(19-8)x(8-3)+3=3
Indeks ke-3 =8 bandingkan dengan keyword 8==8 data
[posisi]==keyword ditemukan.
Program dalam C++

Modul Struktur Data


Output Program:
Jika data ditemukan dalam Indeks.

Jika data tidak ditemukam dalam Indeks.

2. sorting (pengurutan) adalah salah satu proses yang banyak dijumpai dalam
aplikasi menggunakan komputer.Pengurutan membuat data disusun dalam keadaan
urut menurut aturan tertentu, misalnya dari terkecil menuju ke nilai terbesar untuk

Modul Struktur Data


bilangan atau dari A ke Z untuk string.data yang telah diurutkan dalam suatu
laporan memudahkan untuk dibaca dan dipahami oleh pemakai Selain itu, data
yang urut memudahkan pencarian.

Dalam praktek sering dijumpai hal-hal yang menggunakan pengurutan data seperti
1. Yellow pages berisi informasi telepon yang telah diurutkan menurut nama
perusahaan atau perorangan
2. Kamus berisi kata-kata yang telah diurutkan tanpa membedakan Huruf kecil dan
huruf besar
3. Laporan penjualan disusun berdasarkan produk terlaris hingga yang paling
sedikit terjual
4. File file dalam direktori ditampilkan urut berdasarkan atribut tertentu
5. Indeks buku berisi daftar istilah yang memudahkan pembaca mendapatkan
lokasi Halaman yang berisi istilah tersebut
6. Glossary dalam buku teks berisi istilah dan definisi nya, dengan nama-nama
istilah disusun urut.
Pengurutan dapat dilakukan menjadi dua jenis:
1.Ascending(Pengurutan Naik)
2.Descending(Pengurutan Turun)
Misalnya:Pengurutan Naik (Ascending) dapat dinyatakan dengan A-Z.
Pengurutan Turun (Descending) dapat dinyatakan dengan Z-A.
Algoritma Pengurutan data yang sering digunakan:
A. Bubble Sort Merupakan teknik pengurutan data yang membandingkan setiap
elemen data dengan seluruh elemen di dekatnya dan melakukan penukaran jika
memenuhi kriteria tertentu. metode ini merupakan cara yang paling sederhana
dalam pengurutan data, dengan sifat sangat cepat untuk menangani data yang
berjumlah sedikit dan menyita waktu lama untuk data yang sangat banyak.
Langkah-langkah dari algoritma bubble sort :
1) Menentukan data-data yang akan diurutkan dan disimpan dalam array
2) Melakukan pengulangan dari data-data tersebut
3) Melakukan perbandingan antara data yang satu dengan data yang lain , dimana
kalau data yang satu lebih kecil dari data yang lain, maka posisinya ditukar. Kalau
tidak , posisinya tetap

Modul Struktur Data


4) Menampilkan data hasil perbandingan 5) Ulangi langkah 3, sampai semua data
dibandingkan
Ilustrasi Bubble Sort:
Contoh:data Dari :

25 11 16 6 9 3
Proses 1:
25 11 16 6 9 3
25 11 16 6 3 9
25 11 16 3 6 9
25 11 3 16 6 9
25 3 11 16 6 9
3 25 11 16 6 9
Pada gambar di atas, pengecekan dimulai dari data yang paling akhir, kemudian
dibandingkan dengan data di depannya, jika data di depannya lebih besar maka
akan ditukar.
Proses 2: Tidak ada penukaran karna 6 < 9.
3 25 11 16 6 9
3 25 11 16 6 9
3 25 11 6 16 9
3 25 6 11 16 9
3 6 25 11 16 9
Pada proses ke-2, pengecekan dilakukan sampai dengan data ke-2 karena data
pertama pasting sudah paling kecil.
Prose 3:
3 6 25 11 16 9
3 6 25 11 9 16
3 6 25 9 11 16
3 6 9 25 11 16
Proses 4: Tidak ada penukaran karna 11 <
16..
3 6 9 25 11 16
3 6 9 25 11 16
3 6 9 11 25 16
Modul Struktur Data
Proses 5:
3 6 9 11 25 16
3 6 9 11 16 25
Berhenti disini karna data sudah terurut
Sintaks Program Fungsi Bubble Sort
Void bubble sort () {
For (int i=1; i<n; i++) {
For ( int j = n-1; j>=1; j--) {
If (data [j] < data [j-1] )
tukar (j, j-1); // ascending
}
}
}
Dengan Prosedur diatas data terurut naik (ascending) untuk urut turun (descending)
ubah bagian :
If (data [1] < data [j-1] ) menjadi
If (data [1] > data [j-1] )
Tukar (j, J-1);
Program dalam C++
Modul Struktur data

Output

B. Insertion sort Merupakan kombinasi antara sorting dan searching. Untuk setiap
proses, akan dicari elemenelemen yang belum diurutkan yang memiliki nilai
terkecil atau terbesar akan dipertukarkan ke posisi yang tepat di dalam array.
Misalnya untuk putaran pertama, akan dicari data dengan nilai terkecil dan data ini
akan ditempatkan di indeks terkecil (data[0]), pada putaran kedua akan dicari data
kedua terkecil, dan akan ditempatkan di indeks kedua (data[1]). Selama proses,
pembandingan dan pengubahan hanya dilakukan pada indeks pembandingan saja,
pertukaran data secara fisik terjadi pada akhir proses. Metode pengurutan seleksi
merupakan suatu metode yang melakukan pengurutan dengan menyisipkan data
yang belum urut ke dalam bagian data yang telah diurutkan, konsep seperti ini
biasanya dilakukan oleh para pemain kartu pemain selalu berusaha untuk membuat
kartu dalam keadaan urut Jika pemain mendapat kartu baru kartu akan disisipkan
pada lokasi yang membuat kartu tetap urut.meteode pengurutan insertion search:
a. Mulai dari elemen kedua: Anggap elemen pertama sudah terurut (karena satu
elemen selalu terurut). Mulai dari elemen kedua, periksa apakah elemen ini lebih
kecil daripada elemen sebelumnya.
b. Sisihkan elemen: Jika elemen tersebut lebih kecil, maka geser elemen-elemen
yang lebih besar ke kanan untuk memberi ruang bagi elemen tersebut.
Modul Struktur Data

b. Tempatkan elemen pada posisi yang tepat: Setelah menemukan posisi yang
tepat, sisipkan elemen tersebut ke posisi yang benar.
c. Ulangi untuk elemen berikutnya: Lanjutkan dengan elemen berikutnya dan
ulangi proses ini hingga seluruh array terurut.
Ilustrasi Insertion Sort:
Data Awal:
indeks
0 1 2 3 4 5
6 2 4 7 1 3

Proses 1: indeks
0 1 2 3 4 5
2 6 4 7 1 3
Ubah posisi indek 1 menjadi indeks karna 6 >2:
Proses 2: indeks
0 1 2 3 4 5
2 4 6 7 1 3
Ubah posisi indeks 2 menjadi indeks 1 karna 6>4.
Proses 3: indeks
0 1 2 3 4 5
2 4 6 7 1 3
Indeks 3 tetap pada tempatnya karna 6 <7.
Proses 4: indeks
0 1 2 3 4 5
1 2 4 6 7 3
Ubah Posisi indeks 4 menjadi indeks 1 karna 1<2
Proses 3: indeks
0 1 2 3 4 5
1 2 3 4 6 7
Ubah Posisi indeks 5 menjadi indeks 2 karna 3<4.
Hingga Menhasilkan data terurut seperti yang diatas.
Modul Struktur Data
Sintaks program fungsi Insertion Sort
void insertion_sort () {
int temp;
for(int i=1; i<n; i++) {
temp = data[i];
j = i-1;
while (data[j]>temp && j>=0) {
data[j+1] = data[j];
j--;
}
Data[j+1] = temp;
}
}
Dengan Prosedur diatas data terurut naik (ascending) untuk urut turun (descending)
ubah bagian :
while (data[j]>temp && j>=0) { menjadi
while (data[j] < temp && j >= 0)
Program dalam C++
Modul Struktur Data

Output:

C. Selection Sort disebut juga push down sort. Pada pengurutan dengan teknik ini
mula-mula suatu penunjuk (bisa kita beri nama dengan pos awal) menuju ke lokasi
awal pengurutan data. Pertama kali penunjuk menunjuk ke indeks 0 atau awal
array, Kemudian dicari bilangan terkecil yang berada pada posisi dari pos awal
hingga indeks elemen terakhir. isi elemen dengan bilangan terkecil tersebut dicatat
pada pos Min. apabila nilai pos awal tidak sama dengan nilai pos Min, elemen
yang ditunjuk kedua penunjuk tersebut ditukarkan, apabila cara tersebut dilakukan
dari pos awal bernilai 1 hingga n -1 (N menyatakan jumlah data), data dalam array
akan terurutkan.
Cara kerja metode ini didasarkan pada pencarian elemen dengan nilai terkecil,
kemudian dilakukan penukaran dengan elemen ke-i.
Secara singkat metode ini bisa dijelaskan sebagai berikut.
Modul Struktur Data
a. Pada langkah pertama, dicari data yang terkecil dari data pertama sampai
terakhir. Kemudian data tersebut ditukar dari data pertama. Dengan
demikian, data pertama sekarang mempunyai nilai paling kecil dibanding
dengan data lain.
b. Pada langkah kedua, data terkecil kita cari mulai dari data kedua sampai data
terakhir. Data terkecil yang kita peroleh kita tukar dengan data kedua.
c. Demikian seterusnya sampai seluruh data terurut.
Ilustrasi Selection Search:

Iterasi Ke - a[0] a[1] a[2] a[3] a[4] a[5]


Awal 25 12 16 5 3 9
i=0,posisi =4 3 12 16 5 25 9
i=1,posisi =3 3 5 16 12 25 9
i=2,posisi =5 3 5 9 12 25 16
i=3,posisi =3 3 5 9 12 25 16
i=4,posisi =5 3 5 9 12 16 25
Akhir 3 5 9 12 16 25

Fungsi Seclection Sort


void selelctionSort (Larik a, int n) {
Int Posisi;
for (int i=0; I < n-1; i++) {
posisi = i;
for (int j=i+1; j < n; j++) {
if (a[posisi] > a [j]) {
posisi = j;
}
}
Swap (a[i],a[posisi])
}
}
Dengan Prosedur diatas data terurut naik (ascending) untuk urut turun (descending)
ubah bagian : if (a[posisi] > a [j]) Menjadi
if (a[posisi] < a [j])
Modul Struktur Data
Program dalam C++

Output Program

Anda mungkin juga menyukai