Anda di halaman 1dari 14

LAPORAN

APLIKASI SEARCHING & SORTING

Disusun Oleh:

Nadilla Fauzia Putri (24010316140077)

Anantaviriya Kondanna (24010316130078)

Ajeng Mifta Rachmawati (24010316140079)

PROGRAM STUDI ILMU KOMPUTER / INFORMATIKA


FAKULTAS SAINS DAN MATEMATIKA
UNIVERSITAS DIPONEGORO
2017
Searching

Pencarian atau searching suatu data pada sekumpulan data merupakan proses yang sangat
penting. Proses pencarian dilakukan untuk mengetahui apakah data yang dicari terdapat pada
sekumpulan data yang ada. Selain untuk mengetahui keberadaan data, informasi yang lain
yang bisa didapat adalah letak dari data tersebut. Adapun jenis pencarian yaitu:

 Pencarian Beruntun (Sequential Search)

Sequential Search dapat dilakukan pada data yang belum terurut mau pun
yang sudah terurut.Pencarian dilakukan dengan melakukan penelurusan data satu-
persatu kemudian dicocokan dengan data yang dicari, jika tidak sama maka
penelusuran dilanjutkan, jika sama maka penelurusan dihentikan, berarti data telah
ditemukan.

Langkah pencarian:

 Misalkan terdapat data 89 23 54 26 93 43 64 76 35 58


 Ingin diketahui apakah pada sekumpulan data terdapat data 43?
 Maka dilakukan pencarian dengan mencocokan setiap nilai data dari data awal sampai
data terakhir dan berhenti bila data sudah ditemukan.

 Pencarian Bagi Dua (Binary Search)

Pencarian bagi dua atau pencarian biner, hanya dapat dilakukan pada data
yang sudah terurut. Bila data belum terurut dan akan dilakukan pencarian
menggunakan metode ini maka terlebih dahulu harus diurutkan. Untuk data yang
besar metode ini lebih efektif dibandingkan dengan metode pencarian beruntun
(sequential search).

Langkah pencarian:

 Misalkan terdapat data 99 12 23 67 56 60 34 78 29 84


 Misalkan yang di cari adalah data 84
 Langkah pertama adalah mengurutkan data
o 12 23 29 34 56 60 67 78 84 99
 Pencarian dimulai dari tengah
o 12 23 29 34 56   60 67 78 84 99
 Baris bilangan dibagi dua bagian. Bagian yang lebih kecil dari data yang dicari
diabaikan
o 60 67 78 84 99
 Pencarian dimulai dari tengah
o 60 67   78   84 99
 Baris bilangan dibagi dua bagian. Bagian yang lebih kecil dari data yang dicari
diabaikan
o 78 84 99
 Pencarian dimulai dari tengah, maka data 84 ditemukan

Aplikasi Searching

1. Sequential Search

#include <stdio.h>
#include <stdlib.h>
main(){
    int tabInt[10]={24,17,18,15,22,26, 13,21, 16, 28};
    int ketemu;
    int cariData;
    int i;
    printf("Masukkan data yang dicari = ");
    scanf("%d",&cariData);
    i=0;
    ketemu=0;
    while (i<10 && ketemu!=1){
        if (tabInt[i]==cariData){
        ketemu=1;
        }else{
            i++;
        }
    }
    if(ketemu==1){
        printf("Data %d terdapat pada kumpulan data\n",cariData );
    }else{
        printf("Data %d tidak terdapat pada kumpulan data\n",cariData );
    }
}

2. Binary Search

#include <stdio.h>
#include <stdlib.h>
    int main(){
    int tabInt[10] = {12,23,29,34,56,60,67,78,84,99};
    int i,j,k;
    int cariData,ketemu;
    printf("Masukkan data yang dicari = ");
    scanf("%d",&cariData);
    i = 0; j = 9;ketemu = 0;
        while((ketemu == 0) && (i<=j)){
            k = (int)(i + j) / 2;
            if(tabInt[k] == cariData){
            ketemu = 1;
        }
        else{
            if(tabInt[k] > cariData){
                j = k - 1;
            }
            else{
                i = k + 1;
            }
        }
    }
    if(ketemu==1){
        printf("Data %d terdapat pada kumpulan data\n",cariData );
    }else{
        printf("Data %d tidak terdapat pada kumpulan data\n",cariData );
    }
}

Sorting

Sorting alias pengurutan, merupakan suatu hal yang sangat dibutuhkan dalam
pemrograman tingkat tinggi. Ada 5 metode sorting, yaitu:

1. Buble Sort

Bubble Sort merupakan metode pengurutan data dengan prinsip: data indeks
ke i dibandingkan dengan data indeks (i+1), apabila data di index ke i lebih besar
(tidak sesuai) dari data di indeks (i+1) maka data akan ditukar. Demikian seterusnya
hingga semua data dalam keadaan terurut (sesuai). Proses dasar yang terjadi dalam
algoritma ini adalah proses pertukaran nilai (swapping).

2. Selection Sort

Selection Sort merupakan algoritma pengurutan atau sorting yang sederhana


namun memiliki performa yang baik (One of the simplest sorting algorithms),
algoritma ini bisa disebut kombinasi antara searching dan sorting. Untuk melakukan
sorting atau pengurutan secara ascending (menaik dari kecil ke besar), elemen (nilai)
yang paling kecil di antara elemen yang belum urut, disimpan indeksnya, selanjutnya
dilakukan pertukaran anatara nilai elemen dengan nilai indeks yang disimpan tersebut
dengan nilai elemen yang paling depan (pertama). Sedangkan untuk sorting
descending (menurun dari besar ke kecil), elemen yang paling besar yang disimpan
indeksnya kemudian ditukar.

Selection Sort disukai karena kesederhanaan algoritmanya dan performanya


yang lebih bagus dari beberapa algoritma lain yang lebih rumit. Algoritma ini dapat di
ilustrasikan bekerja seperti dibawah ini:

 Pertama cari data terkecil (data dengan nilai terkecil) dari semua data. kemudian
ditukar nilainya dengan data pertama.
 Kemudian cari data terkecil dari data kedua sampai data yang terakhir, kemudian
ditukar nilainya dengan data kedua (data terkecil kedua ditukan posisinya dengan data
kedua).
 Kemudian cari data terkecil dari data ketiga sampai data terakhir, lalu tukar nilainya
dengan data yang ketiga.
 Begitu seterusnya sampai semua data menjadi terurut. Apabila ada N buah data yang
akan kita diurutkan, maka kita butuh N-1 langkah pengurutan, dengan data yang
terakhir, yaitu data ke N tidak perlu diurutkan sebab nilainya sudah pasti yang
terkecil.

3. Insertion Sort

Insertion Sort merupakan algoritma sorting, terutama untuk mengurutkan data


dengan jumlah elemen sedikit. Dimana Input berupa deretan angka sejumlah n buah
data dan Output berupa permutasi (pengurutan) sejumlah n angka dari input, dimana
hasilnya berupa data yang sudah terurut secara ascending maupun descending.

Proses yang terjadi pada pengurutan dengan Insertion Sort adalah dimulai dari
data ke-2 kemudian disisipkan pada tempat yang sesuai. Data pada posisi pertama
dianggap memang sudah benar pada tempatnya. Ilustrasinya mirip seperti saat
menyisipkan kartu di permainan kartu. Dimulai dengan tangan kiri yang kosong dan
kartunya tertumpuk di meja. Selanjutnya kita ambil satu persatu kartu di meja dan
diletakkan di tangan kiri dengan posisi yang benar (terurut). Untuk menemukan posisi
yang benar, maka kita harus membandingkan satu persatu kartu yang ada (di tangan
kiri) secara berurutan.

4. Counting Sort

Counting sort merupakan algoritma soring (pengurutan) yang dapat dilakukan


apabila data dapat dinyatakan sebagai bilangan yang menyatakan besarannya.
Rentang nilai bilangan itu tidak boleh terlalu besar, karena akan dibuat array yang
besarnya sama dengan rentangnya. Ide Counting sort seperti kita melakukan
perhitungan pemilu yaitu dengan mencatat frekuensi atau banyaknya kemunculan
data. Namun metode ini hanya cocok digunakan bila data yang digunakan bertipe
integer dan dibatasi pada range tertentu. Biasanya counting sort hanya digunakan
untuk mengurutkan angka.

 Keungggulan Algoritma Counting Sort adalah dapat mengurutkan dengan waktu yang
lebih singkat, karena tidak membandingkan dengan elemen lain.

 Kelemahan Algoritma Counting Sort adalah menggunakan array yang terlalu banyak.

5. Shell Sort

Shell sort disebut juga dengan metode pertambahan menurun (diminishing


increment). Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959,
sehingga sering disebut dengan Metode Shell Sort. Metode ini mengurutkan data
dengan cara membandingkan suatu data dengan data lain yang memiliki jarak
tertentu, kemudian dilakukan penukaran bila diperlukan.

Shell Sort merupakan salah satu algoritma pengurutan yang lebih handal
dibandingkan Selection Sort dan Bubble Sort. Kehandalannya yaitu: “Membagi deret
data menjadi dua bagian. Masing-masing bagian diurutkan menggunakan Bubble
Sort. Tidak menggunakan iterasi melainkan increment. Perulangan diakukan sesuai
nilai increment.”

Proses pengurutan dengan Shell sort dapat disimulasikan sebagai berikut:

Pertama menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu
N/2. Data pertama dibandingkan dengan data dengan jarak N/2. Apabila data pertama
lebih besar dari data ke N/2 tersebut maka kedua data tersebut ditukar. Kemudian data
kedua dibandingkan dengan jarak yang sama yaitu N/2. Demikian seterusnya sampai
seluruh data dibandingkan sehingga semua data ke-j selalu lebih kecil daripada data
ke-(j + N/2).

Pada proses berikutnya, digunakan jarak (N/2) / 2 atau N/4. Data pertama
dibandingkan dengan data dengan jarak N/4. Apabila data pertama lebih besar dari
data ke N/4 tersebut maka kedua data tersebut ditukar. Kemudian data kedua
dibandingkan dengan jarak yang sama yaitu N/4. Demikianlah seterusnya hingga
seluruh data dibandingkan sehingga semua data ke-j lebih kecil dari data ke-(j + N/4).

Pada proses berikutnya, digunakan jarak (N/4) / 2 atau N/8. Demikian


seterusnya sampai jarak yang digunakan adalah 1.

Algoritma metode Shell dapat dituliskan sebagai berikut:

1. Jarak = N
2. Selama (Jarak > 1) kerjakan baris 3 sampai dengan 9
3. Jarak = Jarak / 2. Sudah = false
4. Kerjakan baris 4 sampai dengan 8 selama Sudah = false
5. Sudah = true
6. j=0
7. Selama (j < N – Jarak) kerjakan baris 8 dan 9
8. Jika (Data[j] > Data [j + Jarak] maka tukar Data[j], Data [j + Jarak], Sudah = true
9. j=j+1

Aplikasi Sorting

1. Bubble Sort
#include "stdio.h"

int main()
{
    int L[20],temp,i,j,n=6;
    printf("pengurutan berdasarkan Bublle sort \nmasukkan %d elements: \n",n);
    for(i=0;i<n;i++){
        scanf("%d",&L[i]);}

    printf("\nsebelum sorting: ");

    for(i=0;i<n;i++){printf("%d ",L[i]);}
    for(i=n-2;i>=0;i--){
    /*5 3 1 2 ===> 3 5 1 2, 3 1 5 2, 3 1 2 5 // 1 3 2 5, 1 2 3 5 // 1 2 3 5*/
        for(j=0;j<=i;j++){
            if(L[j]>L[j+1]){
                temp=L[j];
                L[j]=L[j+1];
                L[j+1]=temp;
      }
    }
  }
    printf("\nsetelah sorting: ");
    for(i=0;i<n;i++){printf("%d ",L[i]);}
    printf("\n");
}

2. Selection Sort

#include "stdio.h"

int main()
{
    int L[20],temp,i,j,n=6;
    printf("pengurutan berdasarkan Selection sort \nmasukkan %d elements: \n",n);
    for(i=0;i<n;i++){
        scanf("%d",&L[i]);}
    printf("\nsebelum sorting: ");

    for(i=0;i<n;i++){printf("%d ",L[i]);}

    for(i=0;i<(n-1);i++){
    /*5 3 2 4 ===> 3 5 2 4, 2 5 3 4, 2 5 3 4 // 2 3 5 4, 2 3 5 4 // 2 3 4 5*/
        for(j= i+1;j<n;j++){
            if(L[i]>L[j]){
                temp=L[i];
                L[i]=L[j];
                L[j]=temp;
      }
    }
  }
    printf("\nsetelah sorting: ");
    for(i=0;i<n;i++){printf("%d ",L[i]);}
    printf("\n");
}

Dimisalkan kita memiliki array sebagai berikut: {5, 1, 12, -5, 16, 2, 12, 14},
kemudian akan diurutkan secara Ascending. berikut ilustrasinya:
3. Insertion Sort

#include "stdio.h"

int main()
{
    int L[20],temp,i,j,n=6;
    printf("pengurutan berdasarkan Insertion sort \nmasukkan %d elements: \n",n);
    for(i=0;i<n;i++){
        scanf("%d",&L[i]);}

    printf("\nsebelum sorting: ");

    for(i=0;i<n;i++){printf("%d ",L[i]);}

    for(i=1;i<n;i++){
    /*5 7 3 1 ===> 5 7 3 1, (5 7 7 1, 5 5 7 1, 3 5 7 1), (3 5 7 7, 3 5 5 7, 3 3 5 7, 1 3 5
7)*/
        temp=L[i];
        j=i-1;
        while((temp<L[j])&&(j>=0)){
            L[j+1]=L[j];
            j=j-1;
    }
        L[j+1]=temp;
  }
    printf("\nsetelah sorting: ");
    for(i=0;i<n;i++){printf("%d ",L[i]);}
    printf("\n");
}

4. Counting Sort

#include "stdio.h"

int main()
{
    int L[20],temp,i,j,n=6,idx;
    printf("pengurutan berdasarkan Counting sort \nmasukkan %d elements: \n",n);
    for(i=0;i<n;i++){
        scanf("%d",&L[i]);}

    printf("\nsebelum sorting: ");

    for(i=0;i<n;i++){printf("%d ",L[i]);}

    for (i=0;i<(n-1);i++){
    /*4 6 1 2 ===> 4 6 1 2, 4 6 1 2, 4 6 1 2, 1 6 4 2 // 1 6 4 2, 1 6 4 2, 1 2 4 6 // 1 2 4 6,
1 2 4 6*/
        idx=i;
        for (j=i+1;j<n;j++){
            if(L[j]<L[idx]){
                idx=j;
      }
    }
        temp=L[i];
        L[i]=L[idx];
        L[idx]=temp;
  }
    printf("\nsetelah sorting: ");
    for(i=0;i<n;i++){printf("%d ",L[i]);}
    printf("\n");
}

5. Shell Sort

#include "stdio.h"

int main()
{
    int L[20],temp,i,j,n=6,m;
    printf("pengurutan berdasarkan Shell sort \nmasukkan %d elements: \n",n);
    for(i=0;i<n;i++){
        scanf("%d",&L[i]);}

    printf("\nsebelum sorting: ");


    for(i=0;i<n;i++){printf("%d ",L[i]);}

    for(m = n/2;m>0;m/=2){
    /*6 7 2 1 ===> 2 7 6 1, 2 1 6 7 // 1 2 6 7, 1 2 6 7, 1 2 6 7*/
        for(j=m;j<n;j++){
            for(i=j-m;i>=0;i-=m){
                if(L[i+m]>=L[i]) break;
                else{
                    temp = L[i];
                    L[i] = L[i+m];
                    L[i+m] = temp;
        }
      }
    }
  }

    printf("\nsetelah sorting: ");


    for(i=0;i<n;i++){printf("%d ",L[i]);}
    printf("\n");
}
DAFTAR PUSTAKA

http://onestringlab.com/pencarian-data-pada-bahasa-c/
http://www.markijar.com/2015/04/contoh-program-bubble-sort-c.html
http://www.markijar.com/2015/04/contoh-program-selection-sort-c.html
http://www.markijar.com/2015/04/contoh-program-insertion-sort-c.html
http://www.markijar.com/2015/04/contoh-program-counting-sort-c.html
http://www.markijar.com/2015/04/contoh-program-shell-sort-c.html

Anda mungkin juga menyukai