Bintari Susilowati
Nim . 1008605065
DAFTAR ISI..............................................................................................................................ii
1.1 Pendahuluan.....................................................................................................................1
1.1.1 Pengertian..................................................................................................................1
2.1 Pendahuluan.....................................................................................................................2
2.1.1 Pengertian..................................................................................................................2
ii
BAB I Metode Searching
1.1 Pendahuluan
Dalam suatu pemrosesan data tidak lepas dari struktur data berupa tabel (array). Tabel
merupakan suatu tipe yang mengacu pada suatu kumpulan element dan dapat diakses
langsung melalui indeks. Hal tersebut dapat berjalan apabila indeks telah terdefinisi dan
sesuai dengan domain yang didefinisikan untuk indeks. Pemrosesan terhadap struktur
data array dapat dilakukkan secara linier(sequensial) ataupun rekursif. Akses terhadap
elemen-elemen yang ada dalam tabel dilakukan dengan memanfaatkan keterurutan
indeks.
Pemrosesan yang paling sering dilakukan terhadap suatu tabel bertipe integer adalah
pencarian nilai (searching) dan pengurutan nilai(sorting). Untuk pencarian dan
pengurutan nilai terhadap berbagai macam jenis algoritma yang dapat digunakan dengan
tingkat keefektifan yang berbeda. Untuk pencarian ada beberapa jenis metode yaitu
pencarian secara linier (sequensial search) dan pencarian biner (binary search) untuk
tabel yang telah terurut nilainya (sorted table).
2
while ((i<Nmax) && (T[i] != value))
{
i = i + 1;
}
if (T[i] == value)
{
*idx = i;
}
else
{
*idx = 0;
}
}
Dengan boolean :
void seqSearch2(int T[], int Nmax, int value, int *idx)
{
int i;
boolean found;
i = 1;
found = false;
while ((i<=Nmax) && (!found))
{
If (T[i] == value){
found = true; }
else {
i = i + 1; }
}
If (found)
{
*idx = i;
}
Else
{
*idx = 0;
}
}
3
1.2.2 Program 2(Binary Search)
void binsearch (int Y[], int Nmax, int value, int * idx){
/* T tabel dengan elemen bertipe integer, sembarang
Idx terdefinisi sebagai index tempat value ditemukan, idx
= 0 jika tidak ketemu, melakukan pencarian thdp harga
value didalam tabel*/
int i, j, mid;
boolean found; $
found = false;
i = 1;
j = Nmax;
while ((!found) && (i<=j))
{
mid = (i + j) div 2;
if (T[mid] == value){
faund = true; }
else {
if (T[mid] <value){
i = mid + 1;
}
else {
j = mid – 1;
}
}
}
If (found) {
*idx = mid;
}
else {
*idx = 0;
}
}
4
BAB II Selection Sort
2.1 Pendahuluan
Untuk pengurutan nilai ada beberapa jenis algoritma yaitu count sort (pengurutan dengan
mencacah), selection sort (pengurutan dengan menyeleksi), insertion sort (pengurutan
dengan penyisipan), quick sort (pengurutan cepat), merge sort (pengurutan dengan
penggabungan), heap sort (pengurutan dengan tumpukan, shell sort (pengurutan
cangkang), dan bubble sort(pengurutan gelembung).
600
500
400
Seconds 300
5
200
0
10 100 1000 10000 25000 100
50000 75000 100000
n 0
Grafik diatas menggambarkan kompleksitas algoritma dari pengurutan seleksi.
Simulasi select sort :
40 2 1 43 3 65 0 -1 58 3 42 4
40 2 1 43 3 4 0 -1 58 3 42 65
40 2 1 43 3 4 0 -1 42 3 58 65
40 2 1 3 3 4 0 -1 42 43 42 65
40 2 1 3 3 4 0 -1 42 43 42 65
-1 2 1 3 3 4 0 40 42 43 42 65
-1 2 1 3 3 0 4 40 42 43 42 65
-1 2 1 0 3 3 4 40 42 43 42 65
-1 2 1 0 3 3 4 40 42 43 42 65
-1 0 1 2 3 3 4 40 42 43 42 65
-1 0 1 2 3 3 4 40 42 43 42 65
-1 0 1 2 3 3 4 40 42 43 42 65
-1 0 1 2 3 3 4 40 42 43 42 65
6
2.2 Contoh Program
Dengan menggunakan double link list, melakukan selection sort :
void sorting() //fungsi sorting
{
tnode* bantu1=(tnode*)malloc(sizeof(tnode)); //alokasi memori
tnode* bantu2=(tnode*)malloc(sizeof(tnode)); //alokasi memori
tnode* index=(tnode*)malloc(sizeof(tnode)); //alokasi memori
int temp;
if(head!=NULL)
{
bantu1=head;
while(bantu1->next!=NULL)
{
bantu2=bantu1->next;
index=bantu1;
while(bantu2!=NULL)
{
if(bantu2->input < index->input) //membandingkan
2 bilangan
{ //jika bantu2 < indexnya maka index berada di
bantu2
index=bantu2;
}
bantu2=bantu2->next;
}
if(bantu1->input > index->input) //jika bantu1 >
index maka ditukar
{
temp=bantu1->input;
bantu1->input=index->input;
index->input=temp;
}
bantu1=bantu1->next;
}
}
else
{
7
printf("Data Pada Linked List Masih Kosong !!");
}
}
8
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct data
{
int nim;
struct data*next;
};
typedef struct data item;
int main()
{
item *head,*tail,*save,*temp,*bantu, *index;
int pilih,pil,pi,m,posisi,pos,tukar,a,b;
head=NULL;
tail=NULL;
do
{
printf("\npilihan anda :\n");
printf("1.Enqueue\n2.Dequeue\n3.View\n4.Mengurutkan
data\n5.Sequential search\n");
printf("6.binary search(data telah terurut)\n7.exit");
printf("\nmasukkan pilihan anda :");
scanf("%d", &pilih);
switch(pilih)
{
case 1 :
{
printf("\n\npilihan anda :\n");
printf("1.sisipkan depan\n2.sisikan
belakang\n3.sisipkan diantara 2 data");
printf("\nmasukkan pilihan anda :");
scanf("%d", &pil);
save=(item*)malloc(sizeof(item));
printf("\nmasukkan data:\n");
fflush(stdin);
9
printf("\nNilai :");scanf("%d", &save->nim);
save->next=NULL;
if(pil==1)
{
if(head==NULL)
{
head=save;
tail=save;
}
else
{
save->next=head;
head=save;
}
}
if(pil==2)
{
if(head==NULL)
{
head=save;
tail=save;
}
else
{
tail->next=save;
tail=save;
}
}
if(pil==3)
{
printf("1.sesudah\n2.sebelum");
printf("\nmasukkan pilihan
anda :");scanf("%d",&pi);
printf("masukkan data sesudah/setelah
data :");
scanf("%d",&m);
printf("masukkan posisi data :");
10
scanf("%d",&pos);
bantu=head;
posisi=1;
if(pi==2)
{
if(head->nim==m && posisi==pos)
{
bantu->next=head;
head=save;
}
else
{
while(head->next->nim!=m && posisi!
=pos)
{
bantu=bantu->next;
posisi++;
}
save->next=bantu->next;
bantu->next=save;
}
}
else
{
while(head->nim!=m && posisi!=pos)
{
bantu=bantu->next;
posisi++;
}
save->next=bantu->next;
bantu->next=save;
}
break;
11
}
case 2 :
{
printf("\n1.hapus data awal\n2.Hapus data tengah-
tengah\n3.hapus data Akhir");
printf("\nmasukkan pilihan anda :");
scanf("%d", &pil);
if(pil==1)
{
if(head==NULL)
{
printf("MAAF saat ini data kosong mohon
diisi dulu");
}
else
{
save=head;
head=save->next;
free(save);
printf("data dengan nommor urut 1 telah
di hapus\n\n\n");
}
}
if(pil==2)
{
if(head==NULL)
{
printf("MAAF saat ini data kosong mohon
diisi dulu");
}
else
{
printf("\nmasukkan posisi data yang akan
di hapus :");
scanf("%d", &pos);
posisi=1;
bantu=head;
12
while(posisi<(pos-1))
{
bantu=bantu->next;
posisi++;
}
temp=bantu->next;
bantu->next=temp->next;
free(temp);
printf("data diposisi ke-%d telah
dihapus\n",pos);
}
}
if(pil==3)
{
if(head==NULL)
{
printf("MAAF saat ini data kosong mohon
diisi dulu");
}
else
{
bantu=head;
while(bantu->next !=tail)
{
bantu=bantu->next;
}
free(tail);
bantu->next=NULL;
bantu=tail;
printf("data diposisi terakhir telah
dihapus\n\n\n");
}
}
break;
}
case 3 :
{
13
if(head==NULL)
{
printf("MAAF data anda saat ini kosong mohon
diisi dulu\n");
}
else
{
save=head;
printf("Data yang anda miliki :\n");
while(save!=NULL)
{
printf("%d ",save->nim);
save=save->next;
}
printf("\n\n");
}
break;
}
case 4 :
{
if(head !=NULL)
{
bantu=head;
while(bantu->next != NULL)
{
temp=bantu;
index=bantu;
while(temp!= NULL)
{
if(temp->nim<index->nim)
{
index=temp;
}
temp=temp->next;
}
if(bantu->nim>index->nim)
{
14
tukar=bantu->nim;
bantu->nim=index->nim;
index->nim=tukar;
}
bantu=bantu->next;
}
printf ("pengurutan berhasil\n");
}
else
{
printf("\npengurutan gagal");
}
break;
}
case 5 :
{
printf("\nmasukkan bilangan yang akan di
cari :");
scanf("%d", & m);
tukar=0;
if(head != NULL)
{
bantu=head;
posisi=1;
while((bantu != NULL)&&(tukar== 0))
{
if(bantu->nim== m)
{
tukar=1;
}
else
{
bantu=bantu->next;
posisi++;
}
}
if(tukar=1)
15
{
printf("\nposisi bilangan %d ada pada
data ke-%d", m,posisi);
}
else
{
printf("\nbilangan %d tidak ditemukan di
data", m);
}
}
else
{
printf("\nMAAF data yang anda miliki
KOSONG!");
}
break;
}
case 6 :
{
printf("\nmasukkan bilangan yang akan di
cari :");
scanf("%d", &m);
posisi=1;
bantu=head;
while(bantu->next !=tail)
{
bantu=bantu->next;
posisi++;
}
while(tukar<=b)
{
tukar=1;
b=posisi+1;
pos=(tukar+b)/2;
a=1;
while(a!=pos)
{
16
bantu=bantu->next;
a++;
}
bantu=bantu->next;
if(bantu->nim == m)
{
printf("bilangan %d ada pada data ke-
%d",m,pos);
}
else if(m<bantu->nim)
{
b=pos-1;
}
else
{
tukar=pos+1;
}
}
break;
}
}
}while(pilih !=7);
if(pilih==7)
{
end:
printf ("\nterima kasih telah mencoba program ini");
printf ("\nPress any key to quit!");
getch();
}
}
17