Anda di halaman 1dari 19

Tugas ASD

Metode Searching dan Selection Sort

Bintari Susilowati
Nim . 1008605065

Jurusan Ilmu Komputer


Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Udayana
2011
DAFTAR ISI

DAFTAR ISI..............................................................................................................................ii

BAB I Metode Searching...........................................................................................................1

1.1 Pendahuluan.....................................................................................................................1

1.1.1 Pengertian..................................................................................................................1

1.1.2 Metode Searching dengan.........................................................................................1

1.1.3 Metode searching dengan..........................................................................................1

1.2 Contoh Program...............................................................................................................1

1.2.1 Program 1..................................................................................................................1

1.2.2 Program 2..................................................................................................................1

BAB II Selection Sort................................................................................................................2

2.1 Pendahuluan.....................................................................................................................2

2.1.1 Pengertian..................................................................................................................2

2.1.2 Macam – Macam Selection Sort...............................................................................2

2.2 Contoh Program...............................................................................................................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).

1.1.1 Metode Pencarian secara Linier (Sequensial Search)


Algoritma pencarian secara linier adalah algoritma untuk mencari sebuah nilai
pada tabel dengan cara melakukan pass atau traversal dari awal sampai akhir
tabel. Terdapat dua cara pencarian pada tabel yaitu jenis metode dengan boolean
dan tanpa boolean.
Implementasi algoritma pencarian secara linier tanpa boolean dalam bahasa C
yaitu melakukkan perulangan sampai batas maksimal tabel atau harga value
dalam tabel sudah ditemukan. Kemudian harga i di-assingn ke dalam variabel
lain. Elemen terakhir diperiksa secara khusus.
Sedangkan implementasi algoritma pencarian secara linier dengan boolean
dalam bahasa C yaitu melakukan pengulangan sebanyak 1 kali untuk kasus
terbaik(value sama dengan elemen pertama dalam tabel) dan sebanyak batas
maksimal untuk kasus terburuk. Sehingga algoritma ini mempunyai
kompleksitas algoritma O(ni).
1
1.1.2 Metode Binary Search (Pencarian Biner)
Algoritma pencarian biner adalah algoritma untuk mencari nilai pada tabel
terurut dengan cara menghilangkan setengah data pada setiap langkah.
Algoritma ini mencari nilai yang dicari dengan tiga langkah yaitu :
1. Mencari nilai tengah dari tabel (median)
2. Melakukkan perbandingan nilai tengah dengan nilai yang dicari untuk
menentukan apakah nilai yang dicari ada pada sebelumatau setelah nilai
tengah
3. Mencari setengah sisanya dengan cara yang sama.
Implementasi algoritma pencarian biner dalam bahasa C yaitu algoritma akan
berakhir karena pada setiap perulangan, jangkauan indeks awal dikurang indek
maksimal tabel akan selalu mengecil dan akhirnya pasti bernilai negatif.
Algoritma pencarian biner melakukan pengulangan sebanyak 1 kali untuk kasus
terbaik(value sama dengan elemen yang berada di tengah tabel) dan 2log Nmax
untuk kasus terburu. Sehingga algoritma ini mempunyai kompleksitas algoritma
O(log n). Dan tentu saja algoritma ini lebih cepat dibandingkan dengan
pencarian linier.

1.2 Contoh Program

1.2.1 Program 1(Sequensial Search)


Tanpa boolean :
void seqsearch1(int T[], int Nmax, int value, int *idx)
/* T tabel dg elemen bertipe
integer, tidak kosong
idx terdefinisi sebagai index tempat value ditemukan, idx
= 0 jika tidak ketemu
Proses : melakukan pencarian harga value dalam tabel T */
{
//kamus lokal
int i;
//algoritma
i=1;

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).

2.1.1 Selection Sort


Algoritma pengurutan dengan penyeleksi mempunyai dua buah kalang, satu
kalang didalam kalang yang lainnya. Banyaknya perbandingan yang harus
dilakukkan untuk siklus pertama adalah n, perbandinagan yang harus
dilakukkan untuk siklus kedua n-1 dan seterusnya. Sehingga jumlah n(n+1)/2-1
perbandingan.
Pengurutan seleksi ini bekerja dengan cara menyeleksi nilai yang paling kecil
yang ada pada tabel. Kemudian nilai tersebut ditukar nilainya. Algoritma ini
memang mudah untuk diimplementasikan, namun tidak efisien untuk tabel
berukuran besar(menyimpan banyak nilai).
Algoritma pengurutan seleksi mempunyai kompleksitas algoritma O(n2), sama
seperti algoritma pengurutan gelembung. Namun jika kedua algoritma tersebut
dijalankan untuk tabel dengan data yang sama, algoritma seleksi 60% lebih
cepat dibandingkan dengan algoritma pengurutan gelembung (bubble sort)
Untuk menggunakan algoritma pengurutan seleksi hindari pengurutan nilai
dengan data pada tabel lebih besar dari 1000 buah, dan hindari mengurutkan
tabel lebih dari beberapa ratus kali.

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

Anda mungkin juga menyukai