Data untuk searching sor:ng
Penger6an struct
- struct adalah kumpulan variabel (masing-‐ masing dapat berbeda 6pe) yang dikelompokkan dan dikemas ke dalam satu
Algoritme dan Pemrograman
nama variabel.
- Tipe struct
Untuk mendefinisikan suatu record. •
- Searching (Pencarian)
- Termasuk 6pe data turunan (derived data Bubble Sort (Pengurutan) •
type). DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Cara membuat struct Deklarasi struct
- Contoh deklarasi variabel menggunakan 6pe &n
- Contoh:
struct:
struct dataMhs {
struct dataMhs mhs;
char *nama;
struct dataMhs arrMhs[100];
int usia;
- };
Dapat juga dilakukan langsung (definisi dan deklarasi):
- Tipe struct ini diberi nama dataMhs
struct dataMhs {
- Terdiri atas dua variabel: nama dan usia
char *nama;
- Pernyataan tersebut hanya membuat 6pe data struct
int usia;
baru, TIDAK mendeklarasikan variabel apapun
} mhs, arrMhs[100];
- – Belum ada alokasi memori DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Contoh program ::
- Typedef merupakan mekanisme untuk membuat sinonim atau alias dari 6pe data yang telah didefinisikan sebelumnya.
- Contoh: typedef struct dataMhs MHS;
- Menggunakan salah satu dari dua operator:
- – operator 66k (.)
- – operator panah (-‐>)
- Akses variabel biasa (selain pointer) menggunakan operator 66k, sedangkan akses variabel pointer menggunakan operator panah. DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
- Dengan demikian, pernyataan struct dataMhs untuk selanjutnya dapat digan6 dengan MHS saja. DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
- Suatu 66k dalam bidang 2D diwakili oleh dua nilai yang masing-‐masingnya menunjukkan nilai untuk masing-‐ masing dimensi dan dicetak dengan notasi (x, y) dengan x dan y adalah bilangan riil
- Buat program untuk membaca dua buah 66k dan menampilkan jarak Euclid keduanya dengan dua angka di belakang 66k desimal. Gunakan 6pe data struct
- Contoh masukan: 2.5 2 5 2
- Contoh keluaran: 2.50 DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
- Diketahui suatu struct mhs untuk data
- Contoh penggunaan fungsi:
- Mencari data berdasarkan nilai tertentu, x.
- Anggaplah kita mempunya array data yang terdiri dari beberapa kolom, salah satunya • Beberapa contoh algoritme pencarian:
- – struct list {
- – Sorted array search
- – Hashing
- – Recursive structures search
- – Mul:dimensional search
- Akan dilakukan sor6ng berdasarkan nilai key
- Pencarian pen6ng dalam struktur data secara ascending. DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
- Ada atau 6dak ada? Keluaran: TRUE/FALSE &n>Se6ap elemen dalam array dibandingkan satu &n
- Indeks kemunculan pertama? Keluaran: suatu nilai antara 0
- Indeks seluruh kemunculan jika ada
- Indeks kemunculan terakhir atau ke-‐i
- – Pencarian nilai yang lebih kecil atau lebih besar dari x
- – Jika suatu array memiliki n buah elemen,
- – Pencarian nilai tertentu untuk fungsi dari x (mis. nilai yang selisihnya dengan x
- // Keluaran: 1 jika ada
- / DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR La6han Sequen6al sorted array search &
- Ubah fungsi sequentialSearch untuk &n
- Data harus terurut
- Se6ap elemen dalam array ditelusuri satu per satu dari awal (kiri) hingga ketemu atau nilai yang dibaca
- – Frekuensi kemunculan x lebih besar dari nilai yang dicari atau semua elemen telah dibandingkan.
- – Indeks seluruh kemunculan
- – Indeks kemunculan terakhir
- – Jika terurut descending, sesuaikan algoritme &n
- – Frekuensi nilai yang lebih kecil dari x
- Mudah diimplementasikan. Waktu proses rela6f cepat untuk kasus data yang • dicari terletak di bagian depan. DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Masih masuk lingkup O(n) – DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Binary search  
- // Keluaran: indeks kemunculan pertama jika ada
- Pencarian dimulai dengan memeriksa elemen yang
- – while ((t[i].val<=val) && (i<n) && (-1==hsl)) {
- – Jika terurut descending, sesuaikan algoritme
- Periksa elemen yang di tengah bagian tersebut
- Mengurutkan data berdasarkan kunci tertentu.
- Jenis sor:ng:
- – Descending (menurun)
- Manfaat: mempercepat dan memudahkan akses
- Banyak algoritme sor:ng dikembangkan untuk:
- – Mempercepat proses
- – Mengefisienkan penggunaan sumberdaya
- Masukan:
- Anggaplah kita mempunyai suatu array integer
- Akan dilakukan sor:ng secara ascending
- Keluaran:
- Ide: nilai yang besar seper6 “gelembung” yang
- t1 = *t2;
- Keuntungan:
- t2 = t; }
- – Menampilkan n buah data
- Cepat jika data masukan sudah terurut –
- Kelemahan:
- Baca elemen array dari kiri ke kanan, bandingkan int i,j; nilai key yang bersebelahan. Jika dua nilai for(i=0;i<n-1;i++){ posisinya 6dak sesuai, tukar tempatnya. Ulangi for(j=0;j<n-(i+1);j++){ prosedur ini sampai semua elemen terurut. if (x[j].val > x[j+1].val)
- – Putaran pertama akan menempatkan nilai paling
- – Dimanfaatkan untuk op6masi inner loop agar 6dak
- Inser:on sort • Untuk menampung data nama dan usia, dibuat dua variabel array:
- Selec:on sort
- Mergesort
Pointer pada struct Merekam data nama dan usia mhs.
#include <stdio.h> #include <stdio.h>
Elok Nian 20 Indah Sekali 19
struct dataMhs { struct dataMhs {
Indah Sekali 19 Indah Sekali 19
char *nama; char *nama; int usia; int usia;
} mhs1; }; int main() { int main() { struct dataMhs mhs2={"Indah Sekali", 19}; struct dataMhs mhs={"Indah Sekali", 19}; mhs1.nama = "Elok Nian"; struct dataMhs *p; mhs1.usia = 20; p = &mhs; printf("%s %d\n", mhs1.nama, mhs1.usia); printf("%s %d\n", mhs.nama, mhs.usia); printf("%s %d\n", mhs2.nama, mhs2.usia); printf("%s %d\n", p->nama, p->usia); return 0; return 0;
} DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
#include <stdio.h> #define SIZE 100 struct nilaiMhs { char nim[9]; int uts, uas; float rataan; }; typedef struct nilaiMhs NILAI; void substring (char *dest, const char *source, int a, int n) { int i=a; for (; i<a+n; i++) dest[i-a]=source[i]; dest[i-a]='\0'; } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
) ( ) ( ,
2
2
( )
La6han #1 Ti6k 2D
3 G64010234 60 80 G64010235 50 45 G64010236 90 76
Array of struct int main() { int n, i; NILAI list[SIZE]; char brs[256], st[4]; scanf("%d\n", &n); for (i = 0; i<n; i++) { gets(brs); // baca per baris data substring(list[i].nim, brs, 0, 9); } substring(st, brs, 10, 2); list[i].uts = atoi(st); substring(st, brs, 13, 2); list[i].uas = atoi(st); for (i = 0; i<n; i++) // hitung rataan tiap mhs list[i].rataan = (float) (list[i].uts+list[i].uas)/2.0; for (i = 0; i<n; i++) { printf("%s %.2f\n", list[i].nim, list[i].rataan); } } return 0; DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Indah Sekali 19 Indah Sekali 19 Array of struct
}; typedef struct dataMhs MHS; int main() { MHS mhs={"Indah Sekali", 19}; MHS *p; p = &mhs; printf("%s %d\n", mhs.nama, mhs.usia); printf("%s %d\n", p->nama, p->usia); return 0; } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
#include <stdio.h> struct dataMhs { char *nama; int usia;
Contoh :: Menggunakan typedef
berar6 mendefinisikan 6pe data baru bernama MHS sebagai sinonim untuk “struct dataMhs”.
Typedef
tergantung 6pe variabel yang dideklarasikan.
Akses anggota struct
y y x x − q p q p d + − = q p
La6han #2 La6han #3
Waktu Buat fungsi untuk menentukan selisih antara dua •
waktu 6me1 dan 6me2 dalam satuan menit. Masing-‐
mahasiswa:
masing waktu terdiri atas 6ga komponen nilai, yaitu
struct mhs {
hour (jam), minute (menit), dan second (de6k).
char nim[10];
char nama[30];
int main() { TIME time1 = {10, 30, 0.0}; float nilai; TIME time2 = {11, 31, 30.0};
};
float beda; beda = selisih(time1, time2);
Buat suatu program untuk menerima n buah data •
printf(".2f\n", beda); // output: 61.50
mahasiswa dan menampilkan daXar mahasiswa
return 0; } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR yang terurut berdasarkan nilai secara descending DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Data untuk searching & sor:ng Searching (pencarian)
Sequen:al search
adalah key dengan 6pe int sbb:
int key;
int val; // contoh elemen lainnya
... // dan seterusnya
}; typedef struct list LIST; • Yang dibahas pada mata kuliah ini adalah
sequen:al search dan sorted array search
Sequen:al search
per satu dari awal (kiri) hingga x ditemukan
dan n-‐1 jika ada atau suatu nilai khusus (mis. -‐1) jika 6dak ada
atau semua elemen telah diperiksa.
Frekuensi kemunculan x? Keluaran: antara 0 hingga n •
Mudah diimplementasikan. •
Waktu proses rela6f lambat untuk ukuran •
data sangat besar.
Dapat divariasikan juga dengan
sebanyak-‐banyaknya berapa perbandingan yang kurang dari suatu nilai ambang) harus dilakukan untuk mencari? O(n)
Penggunaan dua nilai x dan y untuk mencari data yang nilainya di antara – keduanya DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Sequen:al search (kemunculan Sequen:al search (ada/6dak?) pertama)
// Keluaran: indeks kemunculan Ubah fungsi pertama jika ada
// atau 0 jika tidak ada
sequentialSearch // atau bernilai -1 jika tidak ada untuk melakukan variasi
int sequentialSearch(LIST t[], int n, int val) {
pencarian berikut: int sequentialSearch(LIST t[], int
int i, last=0;
n, int val) { 1.
Indeks kemunculan int i;
for(i=0; i<n; i++)
terakhir
if(val==t[i].val) return 1; /* ditemukan */ 2.
Indeks seluruh for(i=0; i<n; i++) kemunculan if(val==t[i].val) return
return 0; /* tidak ditemukan */
i; /* ditemukan */ 3.
}
Frekuensi kemunculan x
4. Frekuensi nilai yang return -1; /* tidak ditemukan lebih kecil dari x
melakukan variasi pencarian berikut:
Asumsi: terurut ascending –
Data harus terurut
// atau bernilai -1 jika tidak ada
// Asumsi: array t terurut secara ascending (menaik)
terletak di indeks tengah-‐tengah (mis. mid) Jika nilai yang di tengah lebih besar dari x, pencarian •
int sortedSearch(LIST t[], int n, int val) {
diarahkan ke data yang ada di kiri mid. Sebaliknya,
int i=0, hsl=-1;
diarahkan ke sebelah kanan.
Asumsi: terurut ascending
if(t[i].val==val) hsl=i;
i++;
}
Ulangi hingga x ditemukan atau data sudah habis • return hsl; /* tidak ditemukan */
} DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Efisien: O(log n) DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
Binary search Sor:ng (Pengurutan)
int binarySearch(LIST t[], int n, int val) { int left, right, mid;
left = 0; right = n-1; //indeks paling kiri dan kanan – Ascending (menaik) while(left<=right) {
mid = (left+right)/2; if (val<t[mid].val) //kanan tidak perlu dicek
right = mid-1;
data
else if (val>t[mid].val) //kiri tidak perlu dicek left = mid + 1;
else return mid; /* ditemukan */
}
return -1; /* tidak ditemukan */ } DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR • Ingat syarat terurut pada binary search DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Contoh Data untuk sor:ng
5 2 4 6 1 3
Sor:ng secara descending dapat dilakukan •
dengan penyesuaian pada algoritme 1 2 3 4 5 6
(ascending) 6 5 4 3 2 1
(descending) DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR
BUBBLE SORT
Mempertukarkan nilai t1 dan t2:
void tukar(LIST *t1, LIST *t2) { akan “naik”
LIST t = *t1;
Sederhana dan mudah diimplementasikan
void printlist(LIST t[], int n) { int i;
for (i=0; i<n; i++) printf("%d ", t[i].val);
Secara umum membutuhkan waktu proses lebih lama –
printf("\n");
Biasa dijadikan contoh algoritme pengurutan yang –
}
2 DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR ;dak efisien (O(n )) DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR Cara kerja BUBBLE SORT
void bubbleSort(LIST x[], int n) {
Pada putaran ke-‐i, nilai ke-‐i terbesar akan berada • tukar(&x[j],&x[j+1]); di posisi yang benar printf("%d %d |", i, j); printlist(x, n);
}
besar di akhir array Bagian yang ditebalkan adalah optimasi inner loop
}
}
Bagian berwarna biru hanya lagi memeriksa nilai yang telah benar posisinya DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR untuk tracing
Algoritme sor:ng lainnya Review
char nama[SIZE][50]; Quicksort • int usia[SIZE];
Bisakah disimpan dalam satu variabel array • biasa? à TIDAK BISA, karena berbeda 6pe.
Beberapa variabel dapat dikemas dalam satu • DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR “paket” dengan struct. DEPARTEMEN ILMU KOMPUTER INSTITUT PERTANIAN BOGOR