Rabu, 03 Juni 2015

Refleksi minggu ke-9 dan ke-10

Assalamu'alaikum salam sejahtera wahai saudara minggu kali ini adalah minggu ke 9 yang mana pada minggu kali ini sorting,.Sorting sendiri  adalah mencari data yang di cari dalam sebuah memory. ada beberapa metode searching antaranya :

A.Linear Search

Bahasa C++
#include <iostream.h>
#define UKURAN 100

int pencarian Linier (int array [ ] , int [ ] , int ukuran)
{ int i;
    for(i=0 ; i<=ukuran-1; i++)
    if(array [i] ==kunci)
       return i;
    return-1;
}


B.Binary Search
    => Asumsi : data sudah dalam keadaan terurut (naik) Contoh : Buku telepon, presensi kuliah, dll.
    =>  Kunci akan selalu dibandingkan dengan data yang berada di tengah (middle).
    => Bila sama berarti data ketemu, bila tidak, akan “dilihat” apakah data ada di sebelah “kiri”                     (artinya data lebih kecil dari data di tengah) atau di sebelah “kanan” (artinya data lebih besar               dari data di tengah).
    => Bila data ada di sebelah kiri, dilakukan pencarian dengan cara yang sama (sementara data yang            berada di sebelah kanan akan diabaikan).
    => Jadi, setiap kali pencarian, data selalu “dibelah” menjadi dua bagian (biner), sampai pada “titik          tertentu” (bila sama dengan titik tengah, pencarian tidak dilakukan lagi, bila tidak, sampai pada          perbandingan terakhir data juga tidak sama, berarti data tidak ditemukan pada array aray).


Bahasa C++
int pencarianBiner(int b[], int kunciPencarian, int low, int high)
{    int i, middle;
     while (low <= high) {
         middle = (low+high) / 2;
         if (kunciPencarian == b[middle])
                return middle;
         else if (kunciPencarian < b[middle])
                high = middle - 1;
         else low = middle + 1;
     }
     return -1;
}


Sorting (Pengurutan)

1.        Usaha : mengurutkan dari data tak terurut menjadi data terurut à perlu waktu
2.       Masalah : efisiensi (peningkatan kecepatan pencarian)
3.       Metode : bubble (gelembung), insertion (penyisipan), selection (pemilihan), merge (penggabungan), quick, shell, radix, dll.
Untuk simulasi macam-macam sorting bisa liat disini.

Berikut beberapa metode sorting:

A. Bubble Sort
  • Prinsip : seperti gelembung, yang besar akan “naik”, yang kecil akan “tetap” di bawah
  • Setiap data (misalnya data pertama) akan dibandingkan dengan data yang ada di sebelahnya (dari data kedua sampai selesai) .
  • Bila data pertama tersebut lebih besar dari data yang ada pada data sesudahnya, dilakukan penukaran tempat atau posisi data.
  • Demikian, untuk data kedua sampai dengan data terakhir dilakukan dengan cara serupa.
Ilustrasi

Data awal :
[8, 4, 7, 3, 1, 2, 6, 5]
8ßà4, 4ßà3, 3ßà1
fase 1
[1, 8, 7, 4, 3, 2, 6, 5]
8ßà7, 7ßà4, 4ßà3, 3ßà2
fase 2
[1, 2, 8, 7, 4, 3, 6, 5]
8ßà7, 7ßà4, 4ßà3
fase 3
[1, 2, 3, 8, 7, 4, 6, 5]
8ßà7, 7ßà4
fase 4
[1, 2, 3, 4, 8, 7, 6, 5]
8ßà7, 7ßà6, 6ßà5
fase 5
[1, 2, 3, 4, 5, 8, 7, 6]
8ßà7, 7ßà6
fase 6
[1, 2, 3, 4, 5, 6, 8, 7]
8ßà7
fase 7
[1, 2, 3, 4, 5, 6, 7, 8]
fase 8
[1, 2, 3, 4, 5, 6, 7, 8]

void tukar (int &a, int &b)
{  int temp;
     temp = a;
     a = b;
     b = temp;
}

void buble_sort (int x[], int n)
{  int i, j;
     for (i = 0; i<n-1; i++)
         for (j = i+1; j<n; j++)
             if (x[i] > x[j]) tukar(x[i], x[j]);
}

B. Insertion Sort
  • Addalah metode pengurutan data dengan menempatkan setiap elemen data pada posisinya dengan cara melakukan perbandingan dengan data-data yang ada. Dalam pengurutan data ke dua, kemudian data yang diambil akan dibandingan dengan data-data yang ada disebuah kiri/ data sebelumnya (data-data sebelumnya data yang diambil/ jika selesai akan dilanjutkan dengan data selanjutnya).
Ilustrasi
Data awal :
[8, 4, 7, 3, 1, 2, 6, 5]
fase 1, 4 masuk
[48, 7, 3, 1, 2, 6, 5]
fase 2, 7 masuk
[478, 3, 1, 2, 6, 5]
fase 3, 3 masuk
[3478, 1, 2, 6, 5]
fase 4, 1 masuk
[13, 4, 7, 8, 2, 6, 5]
fase 5, 2 masuk
[123, 4, 7, 8, 6, 5]
fase 6, 6 masuk
[1, 2, 3, 467, 8, 5]
fase 7, 5 masuk
[1, 2, 3, 456, 7, 8]
fase 8
[1, 2, 3, 4, 5, 6, 7, 8]


procedure insertion_sort(input/output  data:larik;
                                          input n:integer)
Deklarasi
i, j, ditangan : integer
Deskripsi
    for j ß 2 to n do
         ditangan ß data[j]
         for i ß j-1 asalkan {(i >= 0) dan (data[i] > ditangan)} do  
                 data[i+1] ß data[i]
                 i--
         endfor
         data[i+1] ß ditangan



C. Selection Sort
      Ide :
  • Diberikan sederetan kartu :[8, 4, 7, 3, 1, 2, 6, 5]
  • Langkah 1 : dicari terkecil pertama ditaruh paling kiri (pertama)
  • Langkah 2 : dicari terkecil kedua ditaruh paling kiri kedua, dst.

 Ilustrasi
Data awal :
[8, 4, 7, 3, 1, 2, 6, 5]
1 terkecil, 8ßà1
fase 1
[1, 4, 7, 3, 8, 2, 6, 5]
2 terkecil, 4ßà2
fase 2
[1, 2, 7, 3, 8, 4, 6, 5]
3 terkecil, 7ßà3
fase 3
[1, 2, 3, 7, 8, 4, 6, 5]
4 terkecil, 7ßà4
fase 4
[1, 2, 3, 4, 8, 7, 6, 5]
5 terkecil, 8ßà5
fase 5
[1, 2, 3, 4, 5, 7, 6, 8]
6 terkecil, 7ßà6
fase 6
[1, 2, 3, 4, 5, 67, 8]
7 terkecil, tetap
fase 7
[1, 2, 3, 4, 5, 6, 78]
fase 8
[1, 2, 3, 4, 5, 6, 7, 8]



Procedure minimum(input A : larik; dari, n : integer; output tempat : integer)
{ mencari tempat di mana elemen terkecil ditemukan}
Deklarasi
i, min : integer
Deskripsi     
     min ß A[dari];
     tempat ß dari;
     for i ß dari+1 to n do
         if A[i] < min then
              min ß A[i];
              tempat ß i;
         endif
     endfor

Tidak ada komentar:

Posting Komentar