Anda di halaman 1dari 11

TUGAS ALGORITMA DAN STRUKTUR DATA

Metode Searching dan Sorting

Oleh : IDA BAGUS ADISIMAKRISNA PELING 1008605021

JURUSAN ILMU KOMPUTER PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS MATEMATIKA DAN PENGETAHUAN ALAM UNIVERSITAS UDAYANA 2011

METODE SEACHING
Metode pencarian data dapat dilakukan dengan dua cara yaitu pencarian internal (internal searching) dan pencarian eksternal (external searching). Pada pencarian internal, semua rekaman yang diketahui berada dalam pengingat komputer sedangakan pada pencarian eksternal, tidak semua rekaman yang diketahui berada dalam pengingat komputer, tetapi ada sejumlah rekaman yang tersimpan dalam penyimpan luar misalnya pita atau cakram magnetis. Algoritma pencarian (searching algorithm) adalah algoritma yang menerima sebuah argumen kunci dan dengan langkah-langkah tertentu akan mencari rekaman dengan kunci tersebut. Setelah proses pencarian dilaksanakan, akan diperoleh salah satu dari dua kemungkinan, yaitu data yang dicari ditemukan (successful) atau tidak ditemukan (unsuccessful). Selain itu metode pencarian data juga dapat dikelompokkan menjadi pencarian statis (static searching) dan pencarian dinamis (dynamic searching). Pada pencarian statis, banyaknya rekaman yang diketahui dianggap tetap, pada pencarian dinamis, banyaknya rekaman yang diketahui bisa berubah-ubah yang disebabkan oleh penambahan atau penghapusan suatu rekaman.

Ada dua macam teknik pencarian yaitu pencarian sekuensial dan pencarian biner. 1. Pencarian sekuensial / pencarian berurutan Pencarian berurutan sering disebut pencarian linear merupakan metode pencarian yang paling sederhana. Pencarian berurutan menggunakan prinsip sebagai berikut : y Data yang ada dibandingkan satu per satu secara berurutan dengan yang dicari sampai data tersebut ditemukan atau tidak ditemukan. Pada dasarnya, pencarian ini hanya melakukan pengulangan dari sampai dengan jumlah data. Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari.

Apabila sama, berarti data telah ditemukan. Sebaliknya apabila sampai akhir pengulangan tidak ada data yang sama, berarti data tidak ada. Pada kasus yang paling buruk, untuk N elemen data harus dilakukan pencarian sebanyak N kali pula.

Algoritma pencarian berurutan dapat dituliskan sebagai berikut : 1. i 0 false

2. ditemukan

3. Selama (tidak ditemukan) dan (i <= N) kerjakan baris 4 4. Jika (Data[i] = x) maka ditemukan true, jika tidak i i+1

5. Jika (ditemukan) maka i adalah indeks dari data yang dicari, jika tidak data tidak ditemukan Implementasi dalam bahasa C dengan linked list.
void sequentialsearch() { int a=1,value,found=0; printf("\nMasukkan bilangan yang ingin dicari : "); scanf("%d",&value); bantu=head; while(found==0&&bantu!=NULL) { if(bantu->data==value) { found=1; } else { bantu=bantu->next; a++; } } if(found==1) { printf("\nData ditemukan pada indeks ke-%d",a); } else { printf("\nData tidak ditemukan pada linked list"); } }

2. Pencarian Biner Metoda Pencarian Biner ( Binary Search) hanya bisa diterapkan jika data array sudah teruru. pengurutan Array bisa menggunakan jenis sorting

descending atau asscending. Kelebihan dari Searching dengan metode Binary Search adalah Untuk Pencarian data yang jumlahnya banyak, waktu pencarian relatif cepat. selain itu beban komputasi juga lebih kecil karena pencarian dilakukan dari depan, belakang, dan tengah. namun ada pula kekurangannya, yaitu data harus disorting dahulu dan Algoritma lebih rumit, tidak baik untuk data berangkai. Salah satu syarat agar pencarian biner dapat dilakukan adalah data sudah dalam keadaan urut. Dengan kata lain, apabila data belum dalam keadaan urut, pencarian biner tidak dapat dilakukan. Dalam kehidupan sehari-hari, sebenarnya kita juga sering menggunakan pencarian biner. Misalnya saat ingin mencari suatu kata dalam kamus Prinsip dari pencarian biner dapat dijelaskan sebagai berikut : y Mula-mula diambil posisi awal 0 dan posisi akhir = N - 1, kemudian dicari posisi data tengah dengan rumus (posisi awal + posisi akhir) / 2. y Kemudian data yang dicari dibandingkan dengan data tengah. Jika lebih kecil, proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah 1. Jika lebih besar, porses dilakukan kembali tetapi posisi awal dianggap sama dengan posisi tengah + 1. Demikian seterusnya sampai data tengah sama dengan yang dicari.Untuk lebih jelasnya perhatikan contoh berikut:

Misalnya ingin mencari data 17 pada sekumpulan data berikut :

M Mula-mula dicari data tengah, dengan rumus (0 + 9) / 2 = 4. Berarti data tengah adalah data ke-4, yaitu 15. Data yang dicari, yaitu 17, dibandingkan dengan data tengah ini. Karena 17 > 15, berarti proses dilanjutkan tetapi kali ini posisi awal dianggap sama dengan posisi tengah + 1 atau 5.

Data tengah yang baru didapat dengan rumus (5 + 9) / 2 = 7. Berarti data tengah yang baru adalah data ke-7, yaitu 23. Data yang dicari yaitu 17 dibandingkan dengan data tenah ini. Karena 17 < 23, berarti proses dilanjukkan tetapi kali ini posisi akhir dianggap sama dengan posisi tengah 1 atau 6.

Data tengah yang baru didapat dengan rumus (5 + 6) / 2 = 5. Berarti data tengah yang baru adalah data ke-5, yaitu 17. data yang dicari dibandingkan dengan data tengah ini dan ternyata sama. Jadi data ditemukan pada indeks ke-5. Pencarian biner ini akan berakhir jika data ditemukan atau posisi awal lebih besar daripada posisi akhir. Jika posisi sudah lebih besar daripada posisi akhir berarti data tidak ditemukan.

Untuk lebih jelasnya perhatikan contoh pencarian data 16 pada data diatas. Prosesnya hampir sama dengan pencarian data 17. Tetapi setelah posisi awal 5 dan posisi akhir 6, data tidak ditemukan dan 16 < 17, maka posisi akhir menjadi posisi tengah 1 atau = 4 sedangkan posisi awal = 5.

Disini dapat dilihat bahwa posisi awal lebih besar daripada posisi akhir, yang artinya data tidak ditemukan.

Algoritma pencarian biner dapat dituliskan sebagai berikut : 1. L 2. R 0 N1 false

3. ditemukan

4. Selama (L <= R) dan (tidak ditemukan) kerjakan baris 5 sampai dengan 8 5. m (L + R) / 2 true

6. Jika (Data[m] = x) maka ditemukan 7. Jika (x < Data[m]) maka R 8. Jika (x > Data[m]) maka L m1 m+ 1

9. Jika (ditemukan) maka m adalah indeks dari data yang dicari, jika tidak data tidak ditemukan.

Implementasi dalam bahasa C dengan linked list:


Void binersearch() posisi=1; bantu=head; while(bantu->next !=tail) { bantu=bantu->next; posisi++; } tukar=1; b=posisi+1; while(tukar<=b) { pos=(tukar+b)/2; a=1; printf("%d",pos); while(a<pos) { bantu=bantu->next; a++; } if(bantu->nim == m) { printf("bilangan %d ada pada data ke-%d",m,pos); break; } else if(m<bantu->nim) { b=pos-1; } else {

tukar=pos+1; } } break; } }

Lampiran Program Selection Sort dengan Linked List


#include<stdio.h> struct list { int nilai; struct list * next; }; char pil; struct list *head, *tail; int main() { int menu; head = NULL; tail = NULL; menu: printf("*****PROGRAM LINKED LIST*****"); printf("\n1. Menambah data\n"); printf("2. Menghapus data\n"); printf("3. Menampilkan data\n"); printf ("4. selection sort\n"); printf("5. Keluar\n"); printf("masukan pilihan anda : ");scanf("%d",&menu); switch(menu) { case 1 : add(); goto menu; break; case 2 : del(); goto menu; break; case 3 : display(); goto menu; break; case 4 : pengurutan_selection(); goto menu; case 5 : goto end; break; default: printf("maaf pilihan salah!"); goto menu; break;

} end: printf ("\nterimakasih"); getch (); return 0; } void add() { struct list *data,*bantu; char pil; int input; do { printf("\nmasukkan bilangan : ");scanf("%d",&input); if (head==NULL) { data = (struct list *)malloc(sizeof(struct list)); data->nilai = input; data->next = NULL; head = data; tail = data; } else { bantu = (struct list *)malloc(sizeof(struct list)); tail->next = bantu; bantu->nilai = input; bantu->next = NULL; tail=bantu; } printf("\nmasukkan lagi (y/n) ? "); fflush(stdin); scanf("%c",&pil); }while (pil=='y'||pil=='Y'); } void display() { struct list *data; data = head; if (head==NULL) { printf("\n\nlist kosong!"); } else { printf("\n\nisi list : "); do { printf(" %d", data->nilai); data = data->next ; }while(data!=NULL); printf("\n"); } }

void del() { struct list *data,*bantu; int input,flag; { data=head; if (head==NULL) { printf("tidak ada data"); } else { printf("\nbilangan yang ingin dihapus ? "); scanf("%d",&input); do { if (data->nilai==input) { if (head==tail) { head=NULL; tail=NULL; } else if (data==head) { head=data->next; } else if (data==tail) { bantu->next=NULL; tail=bantu; } else { bantu->next=data->next; } flag=1; break; } else { bantu=data; data=data->next; } }while(data!=NULL); if (flag!=1) { printf("\ninputan salah!"); } } } } void pengurutan_selection() { struct list *bantu1,*bantu2,*idxterkecil; int temp;

if(head!=NULL) { bantu1=head; while(bantu1->next!=NULL) { bantu2=bantu1; idxterkecil=bantu1; while (bantu2!=NULL) { if(bantu2->nilai<idxterkecil->nilai) { idxterkecil=bantu2; } bantu2=bantu2->next; } if(bantu1->nilai>idxterkecil->nilai) { temp=bantu1->nilai; bantu1->nilai=idxterkecil->nilai; idxterkecil->nilai=temp; } bantu1=bantu1->next; } printf("\n\ndata telah diurutkan\n\n"); } else printf("\n\nPengurutan dibatalkan karena linked list kosong\n\n"); }

DAFTAR PUSTAKA

http://eprints.undip.ac.id http://staff.ui.ac.id/ http://lecturer.eepis-its.edu/ http://lecturer.ukdw.ac.id/

Anda mungkin juga menyukai