POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
Search
RICKY PRINGGA DUTA 7408030038
1
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
RICKY PRINGGA DUTA 7408030038
2
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
RICKY PRINGGA DUTA 7408030038
3
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
RICKY PRINGGA DUTA 7408030038
4
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
Coding 1. Menu Search Int #include<stdio.h> #include<stdlib.h> #include #define maks 20 void input(); void tampil(); void sekuensial(); void binary(); int partition(int,int); void quick(int,int); void tukar(int *,int *); void menu(); void copy(int *,int *); int a[maks],b[maks]; int cr,n,i,j; main() { char jawab; printf("masukkan jumlah data:"); scanf("%d",&n); input(); puts(""); printf("masukkan data yang dicari:"); scanf("%d",&cr); puts(""); menu(); printf("\nIngin mengulang lagi?[y/t]"); scanf("%s",&jawab); } void menu() { char jawab; do { printf("\tMENU SEARCHING\n"); printf("1.Sequential Unsorted\n2.Sequential Sorted\n3.Binary\n4.Keluar\n\n"); printf("masukkan pilihan anda:"); scanf("%d",&jawab); switch(jawab) { case 1:copy(&a,&b); sekuensial(); puts(""); copy(&b,&a); break; case 2:copy(&a,&b); quick(0,n-1); printf("Data setelah diurutkan:\n"); tampil(); puts(""); sekuensial(); puts("");
RICKY PRINGGA DUTA 7408030038
copy(&b,&a); break; case 3:copy(&a,&b); quick(0,n-1); printf("Data setelah diurutkan:\n"); tampil(); puts(""); binary(); puts(""); copy(&b,&a); break; case 4:exit(0); break; default:printf("Pilihan anda salah\n"); break; } } while(1); } void input() { srand((unsigned)(time(NULL))); for(i=0;i
5
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
} } else printf("Data yang dicari tidak ada\n");
void binary() { int ketemu,mid,comp=0; int l,r;
}
l=0; r=n-1; ketemu=0; i=0;
void quick(int p,int r) { int q;
while((l<=r)&&(ketemu==0)) { mid=(l+r)/2; comp++; if(a[mid]==cr) ketemu=1; else { if(a[mid]
if(p
l=mid+1; int partition(int p,int r) { int x;
} else {
x=a[p]; i=p; j=r;
r=mid-1; } } i++;
while(i<=j) { while(a[j]>x) j--; while(a[i]<x) i++; if(i<j) { tukar(&a[i],&a[j]); j--; i++; } else return j; } return j; } void tukar(int *i,int *j) { int x;
} if(ketemu==1){ printf("Nilai %d terletak pada indeks ke: ",cr); for(i=0;i
x=*i; *i=*j; *j=x; }
RICKY PRINGGA DUTA 7408030038
}
6
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
Debug:
Analisa : Menu Sort int ini berisi Sequential Sort dan Binary Sort. Pada Sequential Sort pencarian data dilakukan dengan cara menelurusi data yang ada dalam array dan membandingkannya dengan data yang dicari. Pencarian berhenti ketika data ditemukan atau penelurusan telah mencapai data terakhir, dan pada Sequential Sort ada 2 pilihan yaitu Sequential Sorted (data terurut) dan Sequential UnSorted (data tidak terurut). Pada Binary Sort data sudah dalam keadaan terurut, pencarian dilaakukan dengan cara membagi array menjadi 2 bagian yang ditandai dengan bagian kiri (awal), tengah dan kanan (akhir). Bagian pertama dibatasi dengan variabel kiri sampai dengan tengah, dan bagian kedua dibatasi dengan variabel tengah sampai variabel akhir. Jika data yang dicari lebih kecil data di posisi tengah, berarti pencarian hanya boleh dilanjutkan pada bagian 1 (kemudian data kanan diisi dengan posisi tengah dan posisi tengah diisi dengan posisi tengah antara kiri dan kanan), dan jika data yang dicari lebih besar dari data di posisi tengah, maka pencarian berikutnya dilanjutkan pada bagian 2 (kemudian data kiri diisi dengan posisi tengah dan posisi tengah diisi dengan posisi tengah antara posisi kiri baru dan kanan), dan jika data yang dicari sama dengan data di posisi tengah, maka berarti data telah ditemukan. Perulangan dilakukan selama posisi kiri < posisi kanan (belum berseberangan) dan data belum ditemukan. 2. Menu Search Struct #include<stdio.h> #include<stdlib.h> #include<string.h> #include #define maks 20 typedef struct { int no; char nama[maks]; float nilai; }mhs;
RICKY PRINGGA DUTA 7408030038
void input(); void output(); void sekuensial(); void binary(); int partition(int,int); void quick(int,int); void tukar(mhs *,mhs *); void menu(); void copy(mhs *,mhs *); int menu_pilihan(); void tampil();
7
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
mhs data[maks],datab[maks],datac; int n,i,j; int urutkan_data; main() { printf("Masukkan jumlah data:"); scanf("%d",&n); input(); do { puts(""); puts(""); menu(); } while(1); } void menu() { char jawab; do { printf("\tMENU SEARCHING\n"); printf("1.Sequential Unsorted\n2.Binary Sort\n3.Tampil\n4.Keluar\n\n"); printf("masukkan pilihan anda:"); scanf("%d",&jawab); switch(jawab) { case 1:copy(&data,&datab);
while(jawab!='t'); } int menu_pilihan() { int pil; printf("Pilihan Search by:\n"); printf("1.No\n2.Nama\n"); printf("masukkan pilihan:"); scanf("%d",&pil); switch(pil) { case 1:printf("Masukkan no yang ingin dicari:"); scanf("%d",&datac.no); return 1; break; case 2:printf("Masukkan nama yang ingin dicari:"); scanf("%s",&datac.nama); return 2; break; default:exit(0); break; } } void input() { puts(""); for(i=0;i
urutkan_data=menu_pilihan(); sekuensial(); puts("");
scanf("%s",&data[i].nama); fflush(stdin); printf("Nilai:");
copy(&datab,&data); break; case 2:copy(&data,&datab); urutkan_data=menu_pilihan(); quick(0,n-1); printf("Data setelah diurutkan:\n"); output(); puts(""); binary(); puts(""); copy(&datab,&data); break; case 3:tampil(); break; case 4:exit(0); break; default:printf("pilihan salah\n"); exit(0); break; }
scanf("%g",&data[i].nilai); fflush(stdin); puts(""); } } void tampil() { int pil; printf("Pilihan tampilan\n"); printf("1.Sorted\n2.Unsorted\n"); printf("masukkan pilihan:"); scanf("%d",&pil); switch(pil) { case 1:copy(&data,&datab); quick(0,n-1); output(); copy(&datab,&data); break; case 2:output(); break; } }
}
RICKY PRINGGA DUTA 7408030038
8
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
void output() {
if(p
printf("****************************** ****\n"); printf("No\tNama\tNilai\n"); printf("****************************** ****\n"); for(i=0;i
q=partition(p,r); quick(p,q); quick(q+1,r); } } int partition(int p,int r) { mhs x; int kondisi_j,kondisi_i; x=data[p]; i=p; j=r;
} void sekuensial() { int ketemu,kondisi; i=0; ketemu=0; while((i
while(i<=j) { if(urutkan_data==1) { kondisi_j=data[j].no>x.no; kondisi_i=data[i].no<x.no; } else { kondisi_j=strcmpi(data[j].nama,x.nama)>0;
kondisi=strcmpi(data[i].nama,datac.nama)= =0; } if(kondisi) { ketemu=1; } else i++; } if(ketemu==1) { if(urutkan_data==1) { printf("No.%d terletak pada indeks ke %d\n",datac.no,i); } else printf("Nama.%s terletak pada indeks ke %d\n",datac.nama,i); } else printf("Data yang dicari tidak ada\n");
kondisi_i=strcmpi(data[i].nama,x.nama)<0; } while(kondisi_j) { j--; if(urutkan_data==1) { kondisi_j=data[j].no>x.no; } else kondisi_j=strcmpi(data[j].nama,x.nama)>0; } while(kondisi_i) { i++; if(urutkan_data==1) kondisi_i=data[i].no<x.no; else
} kondisi_i=strcmpi(data[i].nama,x.nama)<0; void quick(int p,int r) { int q;
RICKY PRINGGA DUTA 7408030038
}
9
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
if(i<j) {
{ ketemu=1; } else if(kondisi2) { r=mid-1; } else { l=mid+1; }
tukar(&data[i],&data[j]); j--; i++; } else return j; } return j; } } void tukar(mhs *i,mhs *j) { mhs x; x=*i; *i=*j; *j=x;
if(ketemu==1) { if(urutkan_data==1) { printf("No.%d terletak pada indeks ke %d\n",datac.no,mid);
} void copy(mhs *a,mhs *b) { int i; mhs temp; for(i=0;i
printf("Perbandingan : %d\n",banding); } else { printf("Nama.%s terletak pada indeks ke %d\n",datac.nama,mid); printf("Perbandingan : %d\n",banding); } } else printf("Data yang dicari tidak ketemu\n"); }
Output :
while((l<=r)&&(ketemu==0)) { mid=(l+r)/2; banding++; if(urutkan_data==1) { kondisi=data[mid].no==datac.no; kondisi2=data[mid].no>datac.no; } else { kondisi=strcmpi(data[mid].nama,datac.nama )==0; kondisi2=strcmpi(data[mid].nama,datac.nam a)>0; } if(kondisi)
RICKY PRINGGA DUTA 7408030038
10
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
Analisa : Menu Sort Struct ini berisi Sequential Sort dan Binary Sort, namun pada program ini, data bertipe Struct yang dimana user dapat memasukkan informasi berupa no, nama, dan nilai. User juga diberi pilihan Search by no dan nama. Jika user memilih Search by no, maka data akan dicari berdasarkan no yang telah diinputkan, dan jika memilih Search by name, maka data akan dicari berdasarkan nama yang telah diinputkan. Pada Sequential Sort Struct pencarian data dilakukan dengan cara menelurusi data yang ada dalam array of struct dan membandingkannya dengan data yang dicari. Pencarian berhenti ketika data ditemukan atau penelurusan telah mencapai data terakhir, dan pada Sequential Sort ada 2 pilihan yaitu Sequential Sorted (data terurut) dan Sequential UnSorted (data tidak terurut). Pada Binary Sort data sudah dalam keadaan terurut, pencarian dilaakukan dengan cara membagi array of struct menjadi 2 bagian yang ditandai dengan bagian kiri (awal), tengah dan kanan (akhir). Bagian pertama dibatasi dengan variabel kiri sampai dengan tengah, dan bagian kedua dibatasi dengan variabel tengah sampai variabel akhir. Jika data yang dicari lebih kecil data di posisi tengah, berarti pencarian hanya boleh dilanjutkan pada bagian 1 (kemudian data kanan diisi dengan posisi tengah dan posisi tengah diisi dengan posisi tengah antara kiri dan kanan), dan jika data yang dicari lebih besar dari data di posisi tengah, maka pencarian berikutnya dilanjutkan pada bagian 2 (kemudian data kiri diisi dengan posisi tengah dan posisi tengah diisi dengan posisi tengah antara posisi kiri baru dan kanan), dan jika data yang dicari sama dengan data di posisi tengah, maka berarti data telah ditemukan. Perulangan dilakukan selama posisi kiri < posisi kanan (belum berseberangan) dan data belum ditemukan.
RICKY PRINGGA DUTA 7408030038
11
POLITEKNIK ELEKTRONIKA NEGERI SURABAYA INSTITUT TEKNOLOGI SEPULUH NOPEMBER
KESIMPULAN 1.
Metode Sequential Search relatif lebih cepat dan efisien untuk data yang terbatas, tetapi tidak efisien untuk data dalam jumlah besar karena akan memakan waktu yang lama dalam proses pencarian data .
2. Data dalam metode Sequential Search tidak harus urut . 3.
Tidak ada worst case dan best case dalam metode Sequential karena pencarian data dilakukan dengan cara menelurusi data yang ada dalam array dan membandingkannya dengan data yang dicari. Pencarian berhenti ketika data ditemukan atau penelurusan telah mencapai data terakhir .
4.
Metode Binary Search sangat efisien untuk pencarian data dalam jumlah besar karena tidak memakan banyak waktu dalam pencarian data .
5.
Berbeda dengan Sequential Sort, dalam Binary Search data harus sudah di-sorting lebih dahulu (dalam keadaan terurut) .
6. Disarankan menggunakan metode Binary Search untuk pencarian data dalam jumlah yang besar .
RICKY PRINGGA DUTA 7408030038
12