Rabu, 13 Januari 2016

PENGERTIAN STRUKTUR DATA


Struktur data adalah cara menyimpan atau merepresentasikan data di dalam komputer agar bisa di pakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata.
Fakta atau keterangan tentang kenyataan yang di simpan, di rekam atau di representasikan dalam bentuk tulisan, suara, gambar, sinyal atau symbol.

Secara garis besar type data dapat di kategorikan menjadi :

1.         Type data sederhana
a.         Type data sederhana tunggal, misalnya Integer, real, boolean dan karakter
b.         Type data sederhana majemuk, misalnya String

2.         Struktur Data, meliputi
a.         Struktur data sederhana, misalnya array dan record
b.         Struktur data majemuk, yang terdiri dari
Linier: Stack, Queue, Daftar Serta Dan Multilist
Non Linier : Pohon Biner dan Graph

Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.

Struktur data yang ″standar″ yang biasanya digunakan di bidang informatika adalah :
  • List linier (Linked List) dan variasinya Multilist
  • Stack (Tumpukan)
  • Queue (Antrian)
  • Tree (Pohon)
  • Grafis (Graf)
  • RECORD (REKAMAN)

Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah di definisikan sebelumnya. Nama rekaman di tentukan oleh pemrogram.

Rekaman disebut juga tipe terstruktur.
Contoh:
  1. ketik Titik: record <x: real, y: real>
jika P dideklarasikan sebagai Titik maka mengacu field pada P adalah P.x dan P.y.

  1. Di definisikan tipe terstruktur yang mewakili Jam yang terdiri atas jam (hh), menit (mm) dan detik (ss), maka cara menulis type Jam adalah :
Jenis JAM: record <hh: integer, {0 ... 23}
mm: integer, {0 ... 59}
ss: integer {0 ... 59}>
Jika J adalah peubah (variabel) bertipe Jam
maka cara mengacu tiap field adalah J.hh, J.mm dan J.ss

Terjemahan dalam bahasa C:
  1. ketik Titik: record <x: real, y: real>
di terjemahkan menjadi:
typedef struct {float x;
ringan;
} Titik;

  1. Jenis JAM: record
<hh: integer, {0 ... 23}
mm: integer, {0 ... 59}
ss: integer {0 ... 59}
> 
di terjemahkan menjadi:
typedef struct
{Int jj; / * 0 ... 23 * /
int mm; / * 0 ... 59 * /
int ss; / * 0 ... 59 * /
} Selai;


A.      Apa Itu Linked List?
Linked list atau di kenal juga dengan sebutan senarai berantai adalah struktur data yang terdiri dari urutan record data dimana setiap record memliki field yang menyimpan alamat/referensi dari record selanjutnya (dalam urutan) elemen data yang di hubungkan dengan link pada linked list disebut Node. Biasanya di dalam suatu lnked list, terdapat istilah head and tail.
·         Head adalah elemen yang berada pada posisi pertama dalam suatu linked list
·         Tail adalah element yang berada pada posisis terakhir dalam suatu linked list
Ada beberapa macam Linked List, yaitu:
1.       Satu Linked Daftar
Single Linked List merupakan suatu linked list yang hanya memiliki satu variabel pointer saja. Dimana pointer tersebut menunjuk ke node selanjutnya. Biasanya field pada tail menunjuk ke NULL
Contoh:
Contoh Codingannya:
            struct Mahasiswa{
            char nama[25];
            int usia;
            struct Mahasiswa *next;
} * kepala, ekor *;

2.       Daftar ganda Linked
Double Linked List Merupakan suatau linked list yang memiliki dua variabel pointer yaitu pointer yang menunjuk ke node selanjutnya dan pointer yang menunuk ke node sebelumnya. Setiap head dan tailnya juga menunjuk ke NULL
Contoh:

Contoh Codingannya:
Struct Mahasiswa{
      char nama[25];
      int usia;
      struct Mahasiswa * berikutnya, * prev;
} * kepala, ekor *;

3.       Daftar Edaran Linked
Circular Linked List merupakan suatu linked list dimana tail (node terakhir) menunjuk ke head (node pertama). Jadi tidak ada pointer yang menunjuk NULL ada 2 jenis Circular Linked List Yaitu:
·          Edaran Tunggal Linked Daftar
Contoh:

http://geeksforgeeks.org/wp-content/uploads/cll_orig.gif
·          Edaran ganda Linked Daftar

Contoh:

http://gmamaladze.files.wordpress.com/2011/08/doubly_linked_list2.png

4.       Beberapa Linked Daftar
Multi Linked List Merupakan Suatu Linked List yang Memiliki Lebih dari 2 buat variabel pointer
Contoh:

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV0rRl6MJ6P_-fCHGW9yCWN8JZOe8_DNsBaS4jNDkpPZ1FYadAIhqO66E201BvbOVnGABaGl63Ynr30aP18DpSyP1K3Wn-TJfG6Z1w8eZBofNvH7hv9xeWv3xDtOxkfkNuwD_oTy0HDZY/s1600/PicsArt_1394853253917.jpg


B.      STACK
Pengertian  Stack  pada  Struktur Data  adalah  sebagai tumpukan dari benda, sekelompok data yang tampaknya di letakkan di atas data yang lain, koleksi dari objek-objek homogen, atau suatu urutan elemen yang elemennya dapat di ambil dan di tambah hanya pada posisi akhir (top ) saja.  Stack  pada  Struktur Data  dapat di ilustrasikan dengan  dua buah kotak yang di tumpuk, kotak yang satu akan di tumpuk diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, di tambah kotak ketiga, keempat, kelima, dan seterusnya, maka akan di peroleh sebuah tumpukan kotak yang terdiri dari N kotak.
Stack pada Struktur Data
Stack bersifat LIFO (Last In First Out) artinya Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack 

Operasi-operasi yang biasanya tredapat pada Stack yaitu:
  1. Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
  2. Pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
  3. Clear : digunakan untuk mengosongkan stack
  4. IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
  5. IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

Cara mendefenisikan Stack dengan Array of Struct yaitu:
  1. Definisikan Stack dengan menggunakan struct
  2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
  3. Buatlah variabel array data sebagai implementasi stack
  4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.

Contoh :
//Deklarasi MAX_STACK
                #define MAX_STACK 10   
            
//Deklarasi STACK dengan struct dan array data
                typedef struct STACK {
                                int top;
                                data char [10] [10];                                                           
                }; 

//Deklarasi/buat variabel dari struct
                STACK tumpuk;

Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong.
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang.  Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.

Stack pada Struktur Data

Ilustrasi Stack pada saat inisialisasi

IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1)  maka belum full.

Data Stack Struktur

Ilustrasi Stack pada kondisi Full

IsEmpty berfungsi untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.
Data Stack Struktur

Push berfungsi untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang ditunjuk oleh TOS).
Tambah satu (increment)  nilai top of stack lebih dahulu setiap kali ada penambahan elemen stack.
Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumnya.
Data Stack Struktur

Pop berfungsi untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack.
Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen stack berkurang.
Data Stack Struktur

Printberfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.
Data Stack Struktur

Stack pada Struktur Data


C.      ANTRIAN
Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front). 
Pada Stack atau tumpukan menggunakan prinsip“Masuk terakhir keluar pertama”atau LIFO (Last In First Out), Maka pada Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out).
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll.
Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak.
Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).

Karakteristik Queue atau antrian:
  1. elemen antrian
  2. front (elemen terdepan antrian)
  3. tail (elemen terakhir)
  4. jumlah elemen pada antrian
  5. status antrian

Operasi pada Queue atau antrian
  1. tambah(menambah item pada belakang antrian)
  2. hapus (menghapus elemen depan dari antrian)
  3. kosong( mendeteksi apakah pada antrian mengandung elemen atau tidak)

Operasi-operasi Queue:
1.       Buat ()
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail  = -1

Queue pada Struktur Data
Queue pada Struktur Data

2.       IsEmpty ()
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu menggunakan nilai Tail.

Queue pada Struktur Data

3.       IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh

Queue pada Struktur Data

4.       enqueue--
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang
Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu

Queue pada Struktur Data

5.       dequeue ()
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping.

Queue pada Struktur Data

6.       Clear ()
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya, namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca

Queue pada Struktur Data

7.      Tampil()
Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail

Queue pada Struktur Data


D.     PENGERTIAN TREE
Kumpulan node yang saling terhubung satu sama lain dalam suatu  kesatuan yang membentuk layakya struktur sebuah pohon. Struktur pohon adalah suatu  cara merepresentasikan suatu struktur hirarki (one-to-many) secara grafis yang mirip sebuah pohon, walaupun pohon tersebut  hanya tampak sebagai kumpulan node-node  dari atas ke bawah. Suatu struktur data yang tidak linier yang menggambarkan  hubungan yang hirarkis (one-to-many) dan tidak linier antara elemen-elemennya.
Deklarasi Pohon
Jika kita memperhatikan setiap simpul dalam pohon biner, kita bisa menyusun  struktur data yang tepat dari simpul-simpul tersebut. Kita dapat melihat bahwa dalam  setiap simpul selalu berisi dua buah pointer untuk menunjuk ke cabang kiri dan cabang  kanan, dan informasi yang akan disimpan dalamsimpul tersebut. Dengan memperhatikan hal ini, simpul dalam pohon biner disajikan sebagai berikut:
Gambar
Sesuai dengan gambar 7.1, maka deklarasi list yang sesuai adalah:
TypeInfo Arang typedef;
typedef struct Simpul * Pohon;
struct Simpul {
Info TypeInfo;
tree Kiri, /* cabang kiri */
Kanan; /* cabang kanan */
};

ISTILAH DALAM TREE
Gambar

Gambar

1.      JENIS-JENIS TREE
POHON BINARY
Tree dengan syarat bahwa tiap node hanya boleh memiliki maksimal dua sub pohon dan kedua subpohon harus terpisah.
Kelebihan Struktur Binary Tree:
·         Mudah dalam penyusunan algoritma sorting
·         Searching data relatif cepat
·         Fleksibel dalam penambahan dan penghapusan data
Gambar

Gambar

Gambar

1.      KUNJUNGAN PADA POHON BINER
Sebuah pohon biner memiliki operasi  traversal  yaitu suatu kunjungan pada
suatu simpul tepat satu kali. Dengan melakukan kunjungan lengkap kita akan
memperoleh urutan informasi secara linier yang tersinpan di dalam pohon biner.
Terdapat tiga jenis kunjungan pada pohon biner, yaitu :
1.       preorder
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
–  Cetak isi simpul yang dikunjungi.
–  Kunjungi cabang kiri.
–  Kunjungi cabang kanan.
Prosedur untuk melakukan traversal secara PREORDER adalah sebagai berikut:
Gambar

  1. Memerintahkan
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
–  Kunjungi cabang kiri.
–  Cetak isi simpul yang dikunjungi.
–  Kunjungi cabang kanan.
Prosedur untuk melakukan traversal secara INORDER adalah sebagai berikut:
Gambar

1.       Mail Order
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
–  Kunjungi cabang kiri.
–  Kunjungi cabang kanan.
–  Cetak isi simpul yang dikunjungi
BERIKUT MERUPAKN CONTOH PROGRAMNYA
#include <stdio.h> // file header
# include <conio.h>
/* Deklarasi struct */
typedef struct Node {
      int data; // pohon Data PADA
      Node * kiri; // penunjuk simpul Anak kiri
      Node * Kanan; // pointer simpul Anak Kanan
};
/* Fungsi untuk memasukkan data ke dalam tree */
kekosongan Tambahkan (Node ** root, int databaru) {
      if((*root) == NULL){       //jika pohon/subpohon masih kosong
            Node *baru;//node “baru” dibentuk…
            baru = Node baru; // struct berdasarkan "Node"
            baru->data = databaru; //data node baru diisi oleh variabel databaru
            baru-> kiri = NULL; // indikator kiri node baru masih kosong
            baru-> kanan = NULL; // indikator kanan node baru masih kosong
            (* root) = baru; // node pohon (root) ditempatkan pada node baru
            (* Akar) -> kiri = NULL; // Indikator kiri node root masih kosong
            (* Root) -> kanan = NULL; // Indikator kanan node root masih kosong
            printf(“Data bertambah!”);
      }
      lain jika (databaru <(* root) -> data) // jika databaru Kurang Dari Data simpul akar ...
            tambah(&(*root)->kiri, databaru);//tambahkan databaru pada subpohon kiri
      lain jika (databaru> (* root) -> data) // jika databaru Lebih Dari data yang akar ...
            tambah(&(*root)->kanan, databaru); //tambahkan databaru pada subpohon kanan
      lain jika (databaru == (* root) -> data) // jika databaru sama DENGAN Data simpul akar
            printf(“Data sudah ada!”);//databaru tidak dapat ditambahkan pada tree
}
/* Fungsi untuk menampilkan data secara pre-order
   (data ditampilkan dari node induk, node anak kiri, lalu node anak kanan)
* /
kekosongan preorder (Node * root) {
      if (root! = NULL) {// jika pohon / subpohon tidak kosong
            printf(“%d “, root->data);//menampilkan data node yang dikunjungi
      preOrder(root->kiri);//mengunjungi node anak kiri
      preOrder(root->kanan); //mengunjungi node anak kanan
      }
}
/* Fungsi untuk menampilkan data secara in-order
   (data ditampilkan dari node anak kiri, node induk, lalu node anak kanan)
* /
membatalkan memerintahkan (Node * root) {
      if (root! = NULL) {// jika pohon / subpohon tidak kosong ...
      inOrder(root->kiri);//mengunjungi node anak kiri
      printf(“%d “, root->data);//menampilkan data node yang dikunjungi
      inOrder(root->kanan);//mengunjungi node anak kanan
      }
}
              
/* Fungsi untuk menampilkan data secara post-order
   (data ditampilkan dari node anak kiri, node anak kanan, lalu node induk)
* /
membatalkan mail order (Node * root) {
     if (root! = NULL) {// jika pohon / subpohon tidak kosong
     postOrder(root->kiri); //mengunjungi node anak kiri
     postOrder(root->kanan);//mengunjungi node anak kanan
     printf(“%d “, root->data); //menampilkan data node yang dikunjungi
     }
}
utama(){
     PDB int c;
     Node *pohon, *t;
     pohon = NULL;
     melakukan{
           int data;
           printf ("MENU \ n");
           printf ("1. Tambahkan \ n");
           printf ("2 lihat Pre-Order \ n.");
           printf (". 3 lihat dalam Orde \ n");
           printf ("4 lihat Pasca Orde \ n.");
           printf ("5 Exit \ n.");
           printf ("PILIHAN:"); scanf ("% d", & pil);
           switch (pil) {
           Kasus 1:
                printf(“Data baru : “);
                scanf ("% d", & data);
                tambah(&pohon, data);
                istirahat;
           Kasus 2:
                if(pohon != NULL)
                     preOrder(pohon);
                lain
                     printf(“Masih kosong!”);
                istirahat;
           Kasus 3:
                if(pohon != NULL)
                     Inorder (Segera);
                lain
                      printf(“Masih kosong!”);
                istirahat;
           Kasus 4:
                if(pohon != NULL)
                     mail order (pohon);
                lain
                     printf(“Masih kosong!”);
                istirahat;
           }
           getch ();
           printf ("\ n");
     }
     sementara (pil = 5!);
}
HASIL
Gambar

Gambar


E.      ARRAY
Sebelum nya saya akan sedikit membahas konsep dasar dari array.Program yang kompleks memerlukan banyak variabel sebagai inputannya. Kita bisa saja mendeklarasikan variable-variable tersebut satu persatu sesuai dengan jumlah yang kita butuhkan.

Misalkan kita memiliki tiga data yang berbeda dan kita simpan dalam variabel yang berbeda.
int number1;
int number2;
int number3;
number1 = 1;
number2 = 2;
number3 = 3;
dll ..............

Bagaimana jika terdapat banyak data yang berbeda yang memiliki tujuan yang sama, dan bagaimana cara menyimpannya.Sebuah variabel array adalah sejumlah variabel berbeda dengan nama yang sama tetapi memiliki nomor indeks yang unik untuk membedakan setiap variabel tersebut. Gambaran tentang konsep array seperti strukur data berikut ini:

Penjelasan:
-Indeks adalah sebuah angka yang menyatakan urutan sebuah elemen pada suatu variabel array
- Nomor indeks variabel array selalu dimulai dari 0 (nol), sehingga nomor indeks bagi elemen terakhir sebesar (N-1), dimana N adalah jumlah total elemen.
- Untuk mengakses dapat dilakkan setiap elemen dalam variabel array dengan mengacu pada nomor indeksnya.

Terdapat 3 langkah untuk membuat array:
*Mendeklarasikan variabel array
Contoh :
int [ ] angka;
“ Variabel angka kita deklarasikan sebagai variabel array dimana setiap elemennya akan
menyimpan data bertipe int ”.

*Memcreate array beserta ukurannya.
Contoh :
angka = new int[5];
int [] Angka = int baru [5];
“Berarti kita memesan 5 elemen untuk variabel angka dan array adalah sebuah object, maka
buat Operator DENGAN array baru. "

*Memberikan sebuah nilai pada setiap element array.
Contoh :
int[ ] angka = {5, 3, 23, 99, 2};
int Nilai = int baru [3];
Sepatu [0] = 75;
sepatu [1] = 80;
Sepatu [2] = 100;

Contoh Program Array 1 Dimensi

import java.io. *;
public class ContohArray1 {
public static void main (String [] args)
{
mencoba{
int [] Angka = int baru [5];
System.out.println ("Masukkan 5 Data");
System.out.println ("===============");
BufferedReader BufferedReader in = baru (InputStreamReader baru (System.in));
for (int i = 0; i <angka.length; i ++)
{
System.out.print ("Data Masukkan Ke -" + (i + 1) + ":");
Angka [i] = Integer.parseInt (in.readLine ());
}
System.out.println ("\ nData Ada Yang Di Array");
System.out.println ("===============");
for (int i = 0; i <angka.length; i ++)
{
System.out.println ("Data Ke -" + (i + 1) + ":" + Angka [i]);
}
}
catch (Exception e) {
System.out.println ("Kesalahan");
}
}
}

Penjelasan :
* Pada baris source int[ ] angka = new int[5] ,kita mendeklarasikan array dengan nama angka yang mempunyai 5 elemen.
* Fungsi length, digunakan untuk mengetahui banyaknya elemen dari suatu array.
* angka[i] = Integer.parseInt(in.readLine()), instruksi untuk memasukkan angka yang kita masukkan ke dalam elemen array.

Hasil
Array 2 Dimensi

Bentuk umum pendeklarasian variabel array dua dimensi di Java adalah:

tipeData[ ][ ] nama_variabel[=new tipeData[jumlah_baris] [jumlah_kolom]];
N adalah nilai yang menyatakan jumlah baris dari array, sedangkan M menyatakan jumlah kolom dari array.

Contoh Program Array 2 Dimensi
public class ArrayDuaDimensi {
static void main (String [] args publik

{Int TwoDarray [] [] = new int [0] [0];
int k = 0;
for (int i = 0; i <5; i ++)
{Untuk (int j = 0; j <4; j ++)
{System.out.print (+ i + "," +

j);}
System.out.print


("");}}}

Hasil


F.       SEARCHING
  1. Pengertian Searching 
Pencarian (Searching) merupakan proses yang fundamental dalam pemrograman, guna menemukan data (nilai) tertentu di dalam sekumpulan data yang bertipe sama. Fungsi pencarian itu sendiri adalah untuk memvalidasi (mencocokkan) data.

  1. Metode pencarian dibagi menjadi 2, yaitu:
1.      Metode Pencarian Beruntun 
Konsep yang digunakan dalam metode ini adalah membandingkan data-data yang ada dalam kumpulan tersebut, mulai dari elemen pertama sampai elemen ditemukan, atau sampai elemen terakhir.
2.      Metode Pencarian Bagi Dua (Binary Search) 
Metode ini diterapkan pada sekumpulan data yang sudah terurut (menaik atau menurun). Metode ini lebih cepat dibandingkan metode pencarian beruntun. Data yang sudah terurut menjadi syarat mutlak untuk menggunakan metode ini. 
Konsep dasar metode ini adalah membagi 2 jumlah elemennya, dan menentukan apakah data yang berada pada elemen paling tengah bernilai sama, lebih dari atau kurang dari nilai data yang akan dicari. Jika bernilai sama, maka langsung data yang dicari ditemukan. Jika data di elemen terurut naik, maka jika data yang berada di tengah kurang dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kanan, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan sebaliknya untuk nilai data yang berada di tengah lebih dari data yang dicari, maka pencarian selanjutnya berkisar di elemen tengah ke kiri, dan begitu seterusnya sampai ketemu atau tidak sama sekali. Dan demikian sebaliknya untuk data yang terurut menurun. Dalam hal ini tentukan indeks paling awal dan indeks paling akhir, untuk membagi 2 elemen tersebut. 
Indeks awal = i, dimana nilai i, pada awalnya bernilai 0; 
Indeks akhir = j, dimana nilai j, pada awalnya bernilai sama dengan jumlah elemen. 

Contoh implementasi searching
#include  

void main () 
{Clrscr (); Ponsel int [5]; 
 

 
int jml_bil,nilai_max; 
int i; 

/* memasukan data */ 
cout<<"masukkan jumlah bilangan kurang dari 5 : ";cin>>jml_bil; 
untuk review (i = 0; i
{cout << "Bilang KE << << i + 1": "; cin >> centang [i]; 
 
} /* menentukan nilai max */ 

 
nilai_max = bil [0]; untuk review (i = 0; i {if (bil [i]> nilai_max) 

 
 
{ nilai_max=bil[i]; } } /* mencetak nilai max */ 
 
 
 

 
cout << "Nilai max: << nilai_max <
cout< getch(); }Algoritma dari
 
 

 

1.      Proses yang terjadi pada pencarian dengan metode ini adalah sebagai berikut : Membaca Array data 
 
2.      Apabila Array belum terurut maka array diurutkan terlebih dahulu. 
3.      Menentukan data yang akan dicari 
4.      Menentukan elemen tengah dari array 
5.      Jika nilai elemen tengah sama dengan data yang dicari, maka pencarian berhenti.

Jika elemen tengah tidak sama dengan data yang dicari maka : 
1.      Jika nilai elemen tengah > data yang dicari maka pencarian dilakukan pada setengah array pertama. 
2.      Jika nilai elemen tengah lebih kecil dari pada data yang dicari maka pencarian dilakukan pada setengah array berikutnya.

</ Nilai_max << / << i + 1 ":"; cin>


G.     SORTING
Sorting/pengurutan biasanya di lakukan untuk tujuan mempermudah pencarian. Pengurutan data baik dari segi ascending (dari nilai terkecil ke terbesar) atau descending (dari nilai terbesar ke terkecil). Ketika akan melakukan sortir di komputer, maka hal-hal yang akan mempertimbangkan, meliputi :
  1. Perlu tidaknya data disortir
  2. Besarnya atau banyaknya data yang akan di sortir
  3. Kemampuan atau kapasitas computer atau media penyimpanan data
  4. Metode sortir
Teknik sortir sangat erat kaitannya dengan proses perbandingan dan penukaran tempat antar elemen data. Waktu terbaik akan di peroleh ketika susunan elemen datanya sudah sama dengan susunan yang di inginkan melalui sortirnya. Waktu terburuk akan di dapatkan ketika susunan elemen-elemen datanya terbalik dari susunan yang di kehendaki sortirnya. Waktu rata-rata di peroleh dengan memperhitungkan berbagai susunan bentuk elemen-elemen datanya.
  1. Bubble Sort
Bubble Sort atau metode gelembung adalah metode pengurutan dengan cara melakukan penukaran data dengan tempat di sebelahnya jika data sebelum lebih besar dari pada data sesudahnya secara terus menerus sampai bisa di pastikan dalam satu iterasi tertentu tidak ada lagi perubahan, atau telah terurut dengan benar. Jika tidak ada perubahan berarti data sudah terurut. Disebut pengurutan gelembung karena masing-masing kunci atau data akan dengan lambat menggelembung atau membandingan data ke posisinya yang tepat.
Metode ini mudah di pahami dan di program, tetapi bila di bandingkan dengan metode lain yang kita pelajari, metode ini merupakan metode yang paling tidak efisien karena memiliki banyak pertukara sehingga memerlukan pengalokasian memori yang besar untuk menjalankan metode ini.

Kelebihan Bubble sort:
Metode Bubble sort adalah metode yang paling simple
Metode Bubble sort mudah dimengerti algoritmanya

Contoh Program Bubble Sort :
#include <iostream.h>
# include <conio.h>
kekosongan Selsort (int X [], int UKURAN)
{
int pos, kecil, suhu;
for (int i = 0; i <-UKURAN 1; i ++) {
kecil = X [i];
for (int j = i + 1; j <UKURAN; j ++)
{
jika (X [j] <kecil)
{kecil = X [j];
            pos = j;}
            }
            temp = X [i];
            X [i] = X [pos];
            X [pos] = suhu;
            }}
            void main (void)
            {Clrscr ();
            int A [10];
            int ukuran;
            cout << "\ n Masukkan berbagai ukuran:";
            cin >> ukuran;
            cout << "\ n Masukkan elemen array yang yang:";
            for (int i = 0; i <ukuran; i ++)
            {
            cin >> A [i];
            }
            Selsort (A, ukuran);
            cout << "\ n The array diurutkan adalah seperti berikut:";
            for (int l = 0; l <ukuran; l ++)
            {cout << A [i];}
            getch ();
            }

Contoh Gambar Cara Kerja Bubble Sort :

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEht4SCHuTYybuk85nDnv_8ktSQq4uE22h9p6Ks5mn9HimbWPAvaN7yS7wxFnWYLnRKpMwdhyslCWSzX3QMO0O28YuaAGQyv3BQN2zD9XwTeqEXyne3BVe8dLWWOv_maR0DDjpJKP_BgunGX/s1600/Bubble+sort.jpg

  1. Seleksi Urutkan
Selection Sort adalah metode yang digunakan dengan cara memilih data yang akan di urutkan menjadi dua bagian, yang belum di urutkan, dan meja yang telah di urutkan. Elemen pertama yang di ambil dari bagian array yang belum di urutkan dan kemudian di letakan pada posisinya sesuai dengan bagian lain array yang telah di urutkan. Tahapan ini di lakukan secara berulang-ulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan.

Contoh Seleksi Program Urutan
# include <conio.h>
#include <stdio.h>
void tampilkan_larik(int data[], int n)
{
int i;
Ulasan untuk review (i = 0; i <n; i ++)
cout << Tanggal [i] << "";
cout << endl << endl;
}

selection_sort kekosongan (data int [], int n)
{
int posmin, posawal, j, tmp;

untuk (posawal = 0; posawal <n-1; posawal ++)
   {
   posmin = posawal;
   Ulasan untuk review (j = posawal + 1; j <n; j ++)
       jika (data [posmin]> Data [j])
          posmin = j;

         //tukarkan
           tmp = Data [posawal];
         tanggal [posawal] = Data [posmin];
         Data [posmin] = tmp;

      "\ N Hasil Ketika Posawal =" cout << << << posawal;
      tampilkan_larik(data,n);

   }
}

int main ()
{
Data int [50], i, n;
cout << "\ n @ Simulasi Seleksi SORT @ \ n \ n \ n";
cout << "========================================= \ n";
cout << "masukkan tanggal Banyak";
cin >> n;


clrscr ();
Ulasan untuk review (int a = 0; a <n; a ++)
    {
   cout << "\ n Tanggal masukkan ke" << a << "";
   cin >> tanggal [a];
   }
selection_sort (data, n);

//hasil pengurutan

cout<<"\n\n  hasil pengurutan : \n\n";
cout<<"  "; tampilkan_larik(data,n);
"\ N SORTING Selesai ..................." cout <<;
getch ();
clrscr ();
cout << "-----------------------"
cout << "by: hamba Allah, 2014";
cout << "-----------------------"
getch ();
return 0;
}

Contoh Gambar Cara Kerja Selection Sort :

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLru99ExWAuTd2ZFywOFBw1GgLc9ySooiCkcB1BjSVMkRtQMNanQLYvxgAl8JSRQNhgdZy5EN911qx_rd8NBxAKcQ4ZSlMfE3Gv_YORmCnX1d8dligkUX0XvSR0Ejn35xy2kBSQotWOXdA/s1600/Selection+Sort.jpg

  1. Penyisipan Urut

Insertion Sort adalah Metode Literasi (pengulangan) yang menginsert atau menyisipkan setiap elemen ketempat yang sesuai(setelah dibandingkan dengan elemen kiri dan kanannya) atau kita bisa mengumpamakan metode ini seperti bermain kartu, yaitu satu demi satu akan menginsert ketempat yang sesuai.
Contoh Program Insertion Sort :
#include <iostream.h>
# include <conio.h>

#define ELEMENTS 6
kekosongan insertion_sort (int x [], int panjang) {
    int kunci, i;
   for (int j = 0; j <Panjang; j ++) {
            key = x [j];
            i = j-1;
            sementara (x [i]> kunci && i> = 0) {
                x [i + 1] = x [i];
                saya--;
            }
            x [i + 1] = kunci;
   }

}

int main () {
    int A [UNSUR] = {9,2,7,5,4,3};
   int x;
   cout<<"array yang belum di sort:";
   untuk review (x = 0; x <ELEMENTS; x ++) {
           cout << A [x];
   }
   cout << endl;
   insertion_sort (A, ELEMENTS);
   cout<<"Array yang sudah di sort:";
   untuk review (x = 0; x <ELEMENTS; x ++) {
           cout << A [x];
   }
   getch ();
   return 0;
}

Contoh Gambar Cara Kerja Insertion Sort :


https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk1UB4OMABJCIv61JzISP427LpGednesH9mQ4uurEArOXuKPh6jKaWFD5B-cEd2od500FL_nYWPF5XlLoC5Tjjh1JaH2C7hM-ojZjUQkJ3L6t29ay7gukGgss_74AfkQVAd_ojBsPHA70S/s1600/Insertion+Sort.gif

Tidak ada komentar:

Posting Komentar