Kamis, 04 Juni 2015

SORTING



  • Pengertian Sorting

                Sorting adalah cara mengurutkan data yang berada dalam suatu tempat penyimpanan dengan urutan tertentu (Ascending) mengurutkan nilai terkecil sampai nilai terbesar. (Discending) mengurutkan nilai terbesar samapi nilai terkecil.


  • Selection Sort
    Selection sort adalah cara mengurutkan  data dimana elemen di bandingkan satu persatu sampai pada elemen terakhir dan disusun berdasarkan ketentuan (ascending stau discending).
*Cara kerja Selection sort
  • Pengecekan dimulai dari data ke -1 sampai data ke -n.
  • Tentukan bilangan dengan indeks terkecil dari bilangan tersebut.
  • Tukar bilangan dengan indeks terkecil tersebut dengan bilangan pertama dari data bilangan tersebut.
  • Begitu seterusnya samapai semua data terurutkan.

 Contoh Program


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <iomanip.h>
main()
{
int g[8];
int i;
int temp;
int minindex;
int j;

clrscr();
cout<<" >> memasuki Program Selection Sort << \n" <<endl;
cout<<"masukkan nilai g :\n";
for(i=0; i<5; i++)
{
cout<<"g["<<i<<"] = ";cin>>g[i];
}
cout<<"\n data sebelum di sort :";
for(i=0; i<5;i++)
{
cout<<setw(4)<<g[i];
}
for(i=0; i<5-1; i++) //perulangan iterasi
{
minindex=i;
for(j=i+1; j<5; j++) //perulangan membandingkan data
{
if(g[minindex]>g[j])
{
minindex=j;
}
}
temp=g[i];
g[i]=g[minindex];
g[minindex]=temp;
}
cout<<"\n\nData setelah di sort :";
for(i=0; i<5; i++)
{
cout<<setw(4)<<g[i];
}
getch();
}

  • Insertion Sort

                Insertion sort adalah metode pengurutan data dengan cara membandingkan dua elemen data pertama, mengurutkannya, kemudian menecek elemen data berikutnya satu persatu den membandingkannya dengan elemen data yang telah diurutkan. Karena metode ini bekerja dengan membandingkan elemen-elemen data yang akan di urutkan.

*Proses Insertion Sort
  • Data dicek satu persatu dari yang ke dua samapai dengan data yang terakhir.
  • Apabila ditemukan data yang lebih kecil dari pada data sebelumnya, maka data tersebut akan disisipkan pada posisi yang sesuai.



Contoh program 

#include <iostream>
#include <conio.h>

int data[20],data2[20];
int n;

void tukar(int a, int b)
{
 int t;
 t = data[b];
 data[b] = data[a];
 data[a] = t;
}

void insertion_sort()
{
 int temp,i,j;
 for(i=1;i<=n;i++)
 {
  temp = data[i];
  j = i -1;
  while(data[j]>temp && j>=0)
  {
   data[j+1] = data[j];
   j--;
  }
 data[j+1] = temp;
 }
}
int main()
{
 cout<<"\t\t\t***PROGRAM INSERTION SORT***\n\n"<<endl;

 //Input Data
 cout<<"Masukkan Jumlah Data : ";
 cin>>n;
 cout<<"\n";
 for(int i=1;i<=n;i++)
 {
  cout<<"Masukkan data ke "<<i<<" : ";
  cin>>data[i];
  data2[i]=data[i];
 }

 insertion_sort();

 cout<<"\n\n";
 //tampilkan data
 cout<<"Data Setelah di Sort : ";
 for(int i=1; i<=n; i++)
 {
  cout<<" "<<data[i];
 }
 cout<<"\n\nSorting Selesai";
 getch();
}

Referensi : slideplayer c++.info

QUEUE


  • Pengertian Queue

                Queue adalah kumpulan data dengan penambahan data hanya melalui satu sisi,yaitu sisi blakang dan penghapusan data hanya melalui sisi depan. Queue merupakan salah satu struiktur data yang memiliki sistemkerja FIFO (Fisrt In First Out). Dimana data yang pertama kali masuk maka data tersebut akan keluar lebih dulu.

Di dalam Queue mempunyai dua kata kunci yaitu Head dan Tail. Head adalah penanda urutan paling depan. Tail adalah penanda urutan paling belakang.

  • Deklarasi Queue

                Variabel yang digunakan adalah data, head, tail. Nilai dari head dan tail dimulai dari -1 yang menandakan Queue kosong. Contoh Queue menggunakan  maksimal 5 data.



  • Operasi Queue
  1. IsEmpty : Mengecek apakah Queue kosong atau tidak.
  2. IsFull : Mengecek apakah Queue sudah penuh atau tidak.
  3. EnQueue : Menabah data di Queue.
  4. Dequeue : Mengambil data dari Queue.
  5. Clear : Menghapus data dalam elemn.
  6. View : Meliahat data dalam antrian.
  • IsEmpty
                IsEmpty digunakan untuk mengecek apakah Queue Kosong atau tidak. Indikator bahwa Queue kosong adalah nilai dari head dan tail adalah -1.

  • IsFull

                IsFull digunakan untuk mengecek apakah antrian sudah penuh atau tidak. Indicator kalau Queue penuh adalah nilai tail = max-1

  • Enqueue

                Enqueue digunakan untuk memasukkan data kedalam Queue. Sebelum memasukkan data ke dalam antrian , harus dipastikan apakah antrian penuh atau tidak. Kalau antrian tidak penuh maka dilakukan pengecekan apakah head sudah berada di nilai 0 atau belum.

  • Dequeue

                Dequeue digunakan untuk mengambil data yang sudah masuk di urutan pertama. Sehingga Tinggal membaca data yang ada di posisi head.cek apakah queue kosong atau tidak, jika ada isinya ,setelah data di ambil data dibelakangnya digeser ke depan.

  • Clear

                Clear digunakan untuk menghapus data di dalam queue. Caranay mengubah nilai pada head dan tail menjadi -1.

  • View

                View digunakan untuk melihat data yang didalam Queue. Caranya dengan mambaca data pada indeks yang terdapat diantara head sampai tail.


Contoh Program QUEUE

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#define n 10
int Q[n],L,R,x;
void awal()
{
    R=-1;L=0;
}

void insertkiri()
{
    cout<<"Inputkan data :";cin>>x;
    if (L>0)
    {
        L--;
        Q[L]=x;
    }
    else
        cout<<"Antrian penuh kiri";
}

void insertkanan()
{
    cout<<"Inputkan data :";cin>>x;
    if (R<n-1)
    {
        R++;
        Q[R]=x;
    }
    else
        cout<<"Antrian penuh kiri";
}

void deletekiri()
{
    if (L<R+1)
    {
        x=Q[L];
        L++;
        cout<<x;
    }
    else
        cout<<"Antrian kosong";
}

void deletekanan()
{
    if (L<R+1)
    {
        x=Q[R];
        R--;
        cout<<x;
    }
    else
        cout<<"Antrian kosong";
}


void main()
{
    int pilih;
    char jawab;
    awal();
    jawab='y';
    while ((jawab=='y')||(jawab=='Y'))
    {
     clrscr();
     cout<<"1.INSERT KIRI"<<endl;
     cout<<"2.INSERT KANAN"<<endl;
     cout<<"3.DELETE KIRI"<<endl;
     cout<<"4.DELETE KANAN"<<endl;
     cout<<"5.EXIT"<<endl;
     cout<<"Inputkan pilihan :";cin>>pilih;
     switch (pilih)
     {
        case 1:
            insertkiri();
            break;
        case 2:
            insertkanan();
            break;
        case 3:
            deletekiri();
            break;
        case 4:
            deletekanan();
            break;
        case 5:
            exit;
            break;
     }
     cout<<endl<<"Ulangi proses lagi ? [y/t]";
     cin>>jawab;
    }
}




Referensi : masiyak c++ Tips 

SEARCHING



Searching

  • Searching adalah metode pencarian informasi . searching digunakan untuk pencarian informasi khusus dari table pada saat lokasi yang pasti dari informasi tersebut sebelumnya tidak di ketahui. Pencarian selalu dinyatakan dengan referensi pada adanya sekelompok data tersebut .

Ada dua Teknik searching yaitu sequential search dan binary search.

  • Sequential search

                Pencarian Sequential search pada dasarnya hanya melakukan pengulangan dari 1 samapai dengan jumlah data. Pada setiap perulangan dibandingkan data ke-I dengan data yang dicari.. apabiala sama berarti data telah ditemuakan, dan sebaliknya apabila samapai akhir pengulanagn tidak ada data yang sama berarti data tersebut tidak ada.
Prinsip sequential search, data yang dibandingkan satu persatu secara berurutan dengan data yang dicari.

Contoh program

PROGRAM 1

#include<iostream.h>
#include<conio.h>

void main()
{
//deklarasi variabel
int a[10],index[10], i,j,k;
//proses penginputan data
for(i=1;i<=10;i++)
{
cout<<"Data ke ["<<i<<"] = ";
cin>>a[i];
}
//memasukkan data yang akan dicari ke dalam K
cout<<endl;
cout<<"Masukkan data yang akan anda cari = ";
cin>>k;
cout<<endl;
//proses pencarian data
j=0;
for (i=1;i<=10;i++)
{
if(a[i]==k)
{
index[j]=i;
j++;
}
}
//jika data ditemukan dalam array
if (j>0)
{
cout<<"Data "<<k<<" yang dicari ada "<<j<<" buah"<<endl;
cout<<endl;
cout<<"Data tersebut terdapat dalam index ke : ";
for(i=0;i<j;i++)
{
cout<<"  "<<index[i];
}
cout<<endl;
cout<<endl;
}
//jika tidak ditemukan
else
{
cout<<"Data tidak ditemukan dalam array"<<endl;
}
getch();
}

PROGRAM 2

#include <conio.h>
#include <iostream.h>
main(){
int c,i,posisi;
int A[20]={2,4,6,8,10,12,14,16,18,20,31,33,35,37,39,41,43,45,47,49};


cout<<"Data : ";
for(i=0;i<20;i++){
cout<<A[i]<<" ";
}

cout<<"\nData yang ingin dicari : ";
cin>>c;
i=0;
posisi=0;
while(i<19 && A[i]!=c){
i++;
}
if (A[i]!=c){
cout<<"Maaf data yang dicari tidak ada";
}else if(posisi=i+1)
   cout<<"ditemukan pada posisi ke "<<posisi;
getch();
}
  • Binary search

                Dalam binary search data yang ada harus sudah terurut. Apabila data belum terurut maka pencarian biner tidak dapat dilakukan.
Proses pencarian biner

  1. Dari posisi awal = 1dan posisi akhir = n
  2. Kemudian cari posisi data tengah dengan rumus . posisi tengah= (posisi awal + posisi akhir)div2
  3. Kemudian data yang dicari di bandingkan dengan data tengah.
  4. Jika sama maka data ditemukan dan proses selesai.
  5. Jika lebih kecil maka proses dilakukan kembali tetapi posisi akhir dianggap sama dengan posisi tengah.
  6. Jika lebih besar maka proses dilakuakn kembali tetapi posisi alwal dianggap sama dengan posisi tengah.
  7. Ulangi langkah tersebut hingga data ditemukan atau tidak.
  8. Pencarian data akan berakhir jika data ditemuakn pada posisi awal lebih beasr dari posisi akhir.
Contoh program

 #include<iostream>

int main ()
{
 int n, angka[12], kiri, kanan, tengah, temp, key;
 bool ketemu = false;

 cout<<"inputkan jumlah data yang anda inginka : ";
 cin>>n;

 for(int i=0; i<n; i++)
 {
  cout<<"Angka ke - ["<<i<<"] : ";
  cin>>angka[i];
 }
 for (int i=0; i<n; i++)
 {
  for(int j=0; j< n-i-1; j++)
  {
   if(angka [j] > angka [j+1])
   {
    temp=angka[j];
    angka[j]=angka[j+1];
    angka[j+1]=temp;
   }
  }
 }
 cout<<"Data telah diurutkan : ";
 for(int i=0; i<n; i++)
 {
  cout<<angka[i]<<" ";
 }
 cout<<"\n angka yang dicari : ";
 cin>>key;

 kiri=0;
 kanan=n-1;

 while(kiri<=kanan)
 {
  tengah=(kiri + kanan)/2;
  if(key == angka[tengah])
  {
   ketemu=true;
   break;
  }
  else if (key < angka [tengah])
  {
   kanan = tengah -1;
  }
  else
  {
   kiri = tengah +1;
  }
 }
 if (ketemu == true)
  cout<<"Angka diketahui!";
 else
  cout<<"Angka tidak diketahui";
  return 0;
 }


Referensi : Jamsa's  1001 C/C++ Tips