Jumat, 20 Mei 2016

Refleksi minggu ke sepuluh

Pada pertemuan ke-10 masih membahahas mengenai macam-macam sorting dan algoritma penyelesaiannya. Dan tambahannya yaitu membahas mengenai searching. Sorting dan searching adalah sesuatu yang berkaitan, dimana sorting di gunakan untuk mengurutkan data sedangkan searching di gunakan untuk mencari data. Jadi jika data yang ada sudah urut itu akan mempermudah dan menghemat waktu dalam pencarian data.

How To Solve per 9

1. Algorithm 5.1 The Two-Way Merge.

Algoritma :
        if a[m]<b[n] then a[m+1]:=b[n+1]:=a[m];
            i:=1;
            j:=1;
            nm:= n+m;
       for k:= 1 to nm dobegin {merge next element }
            if a[i]<b[j] thenbeginc[k]:=a[i];
                 i:=i+1end elsebeginc[k]:=b[j];
                 j:=j+1end
       end
Program dengan C++ :
#include <iostream>
#include <cstdlib>
using namespace std;

int data[100];
void mergeSort(int awal, int mid, int akhir){
         cout<<endl;
int temp[100], tempAwal = awal, tempMid = mid, i = 0;
while(tempAwal < mid && tempMid < akhir){
        if(data[tempAwal] < data[tempMid])
               temp[i] = data[tempAwal],tempAwal++;
        else
              temp[i] = data[tempMid],tempMid++;
              i++;
}
while(tempAwal < mid) //kalau masih ada yang sisa
         temp[i] = data[tempAwal],tempAwal++,i++;
         while(tempMid < akhir)
         temp[i] = data[tempMid],tempMid++,i++;
for(int j=0,k=awal;j<i,k<akhir;j++,k++) //mengembalikan ke array semula, tapi
cout<<data[k]<<' '<<temp[j]<<endl, data[k] = temp[j]; //sudah urut
}
void merge(int awal, int akhir) //membagi data secara rekursif{
      if(akhir-awal != 1){
          int mid = (awal+akhir)/2;
          merge(awal, mid);
          merge(mid, akhir);
          mergeSort(awal, mid, akhir);
      }
}
int main(){
    int n;
   cout<<"Masukan banya data = ";cin>>n;
   cout<<"Masukan data yang akan di susun = ";
   for(int i=0;i<n;i++)
   cin>>data[i];
   merge(0,n);
   for(int i=0;i<n;i++)
        cout<<data[i]<<' ';
return 0;
}


 2. Algorithm 5.2 Sorting By Selection.
Algoritma:
Selection Sort
Algoritma ini mudah diterjemahkan ke dalam program computer tetapi memiliki kekurangan yaitu sort dengan menggunakan metode Seleksi membutuhkan ruang di memori untuk meyimpan 2 daftar lengkap.
Jika memiliki satu daftar nama dan meletakkan dalam urutan berdasarkan huruf bisa menggunakan pemdekatan umum sebagai berikut :
      1.      Temukan atau cari nama yang pertama kali datang dalam urutan huruf dan tulis di sheet kedua
      2.      Tandai nama yang keluar dari daftar asli
      3.       Lanjutkan perputaran ini sampai semua nama di daftar semula telah di coret dan ditulis di daftar kedua dimana di bagian daftar yang kedua ini nama-nama sudah terurut berdasarkan huruf.
Program C++ :
#include <iostream.h>
#include <conio.h>
int data[100],data2[100];
int n;
void tukar(int a,int b)
{
int t;
t = data[b];
data[b] = data[a];
data[a] = t;
}
void bubble_sort()
{
for(int i=1;i<n;i++)
{
for(int j=n-1;j>=i;j–)
{
if(data[j]<data[j-1]) tukar(j,j-1);
}
}
cout<<”bubble sort selesai!”<<endl;
}
void exchange_sort()
{
for (int i=0; i<n-1; i++)
{
for(int j = (i+1); j<n; j++)
{
if (data [i] > data[j]) tukar(i,j);
}
}
cout<<”exchange sort selesai!”<<endl;
}
void selection_sort()
{
int pos,i,j;
for(i=0;i<n-1;i++)
{
pos = i;
for(j = i+1;j<n;j++)
{
if(data[j] < data[pos]) pos = j;
}
if(pos != i) tukar(pos,i);
}
cout<<”selection sort selesai!”<<endl;
}
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;
}
cout<<”insertion sort selesai!”<<endl;
}
void QuickSort(int L, int R) //the best sort i’ve ever had
{
int i, j;
int mid;
i = L;
j = R;
mid = data[(L+R) / 2];
do
{
while (data[i] < mid) i++;
while (data[j] > mid) j–;
if (i <= j)
{
tukar(i,j);
i++;
j–;
};
} while (i < j);
if (L < j) QuickSort(L, j);
if (i < R) QuickSort(i, R);
}
void Input()
{
cout<<”Masukkan jumlah data = “; cin>>n;
for(int i=0;i<n;i++)
{
cout<<”Masukkan data ke-”<<(i+1)<<” = “; cin>>data[i];
data2[i] = data[i];
}
}
void Tampil()
{
cout<<”Data : “<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<” “;
}
cout<<endl;
}
void AcakLagi()
{
for(int i=0;i<n;i++)
{
data[i] = data2[i];
}
cout<<”Data sudah teracak!”<<endl;
}
void main()
{
int pil;
clrscr();
do
{
clrscr();
cout<<”Program Sorting Komplit!!!”<<endl;
cout<<”*********************************************”<<endl;
cout<<” 1. Input Data”<<endl;
cout<<” 2. Bubble Sort”<<endl;
cout<<” 3. Exchange Sort”<<endl;
cout<<” 4. Selection Sort”<<endl;
cout<<” 5. Insertion Sort”<<endl;
cout<<” 6. Quick Sort”<<endl;
cout<<” 7. Tampilkan Data”<<endl;
cout<<” 8. Acak Data”<<endl;
cout<<” 9. Exit”<<endl;
cout<<” Pilihan Anda = “; cin>>pil;
switch(pil)
{
case 1:Input(); break;
case 2:bubble_sort(); break;
case 3:exchange_sort(); break;
case 4:selection_sort(); break;
case 5:insertion_sort(); break;
case 6:QuickSort(0,n-1);
cout<<”quick sort selesai!”<<endl;
break;
case 7:Tampil(); break;
case 8:AcakLagi(); break;
}
getch();
}while(pil!=9);
}

  3.  Algorithm 5.3 Sorting By Exchange.
Soal
Diberikan urutan yang tidak beraturan dari kumpulan nilai n gunakan urutan dengan emnggunakan sorting by exchange
Penyelesaian :
Bubble Sort (Gelembung) merupakan metode pertukaran yang alur logikanya mirip dengan gelembung yaitu dengan cara membandingkan indeks Array yang pertama dengan indeks Array berikutnya secara terus menerus dan bergantian. Namun cara ini kurang efektif karena meskipun data sudah terurut proses perulangan yang terjadi akan terus berlangsung sampai batas perulangan itu berakhir. Ini adalah contoh alur alogaritmanya dalam kode program.

for (c=0; c<7; c++)
{ for (x=0; x<7; x++)
{if (menu[x]menu[x+1])
{term=menu[x];
menu[x]=menu[x+1];
menu[x+1]=term;
}
else {
menu[x]=menu[x];
}}}
Selection Sort (Maksimum/Minimum) merupakan metode pertukaran yang mencari nilai Maksimum/Minimum sekelompok data array yang nantinya nilai yang paling ujung akan diisolasikan dan tidak disertakan pada proses selanjutnya. Perhatikan contoh code berikut ini.
for(y=0; y<9; y++)
{max=0;
for (x=1; x<=b; x++)
{ if (A[x]>A[max])
{
max=x;
} }
if (A[max]>A[b])
{ term=A[b];
A[b]=A[max];
A[max]=term;
b--;
} else
{
b--;
}}
Insertion Sort (Sisip) meripakan metode pengurutan dengan cara menyisipkan nilai pada array pada posisi yang tepat. Untuk lebih jelasnya silakan lihat code dibawah ini.
for (k=1; k<9; k++)
{
term=L[k];
j=k-1;
while (term<=L[j])
{
L[j+1]=L[j];
j--;
}
if ((term >= L[j]) || (j=1))
{
L[j+1]=term;
}
else
{
L[j+1]=L[j];
L[j]=term;
}


4. Algorithm 5.4 Sorting By Insertion. 
Algoritma :
1. Membangun sebuah array [1 .. n] elemen n.
2. Menemukan minimum dan meletakkannya di tempat untuk bertindak sebagai sentinel :
3. Sementara masih ada unsur-unsur yang akan dimasukkan di bagian memerintahkan melakukan
      a. Pilih x elemen berikutnya untuk dimasukkan
      b. Sementara x kurang dari sebelumnya unsur melakukan
      c. Insert x pada posisi saat ini
for i:=2 to n do
    begin {search for x's position then insert it}
    j:=1; x:=a[i];
while x>a[j] do j:=j+1
for k:= i down to j+1 do a[k]:= a[k-1];
   a[j]:=x
end
Program C++ :
#include <iostream.h>
void main(){
int data[100];
int a,b,c,d,x;
int temp;

cout<<"PROGRAM SORTING DATA "<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<"Masukkan jumlah data : ? ";cin>>x;

for(d=1;d<=x;d++)
{
cout<<"Data ke-"<<d<<" = ";cin>>data[d];
}
cout<<"\nData Sebelum Diurutkan \n";
for(d=1;d<=x;d++){
cout<<"\t"<<data[d];
}
for(a=0;a<x;a++){
for(b=0;b<x;b++)
if(data[b]>= data[b+1])
{
temp=data[b];
data[b]=data[b+1];
data[b+1]=temp;
}
}
cout<<"\n\nData setelah diurutkan :\n";
for(c=0;c<x;c++)
cout<<"\t"<<data[c];
cout<<"\n\n---------------------------------------------"<<endl
}
 system("PAUSE");
    return EXIT_SUCCESS;
}

Senin, 16 Mei 2016

Mengurutkan deret dengan Motode Bubble Sort

  • Analisis 
Bubble sorting adalah penggurutan dengan memindahkan data paling kiri dan dibandingkan dengan data disebelah kannannya.
Dan ketika data kiri lebih besar dari data yang di sebelah kanan maka data tersebut akan di pindah atau di tukar.


  • input dan output

Input : data sejumlah n yang tidak urut

Output : data urut dari kecil ke besar


  • Algoritma
  •  Flowchart



  • Dev c++


Program INSERTION Sallahudin
Program SELECTTION Aji sentosa

Refeksi minggu ke sembilan

Pertemuan ke-9 ane kuliah malem gan, karna pagi nya pak dosen marah dan kuliah di gantikan mlm itu.  ini materi yang dibahas mengenai sorting. Sorting yaitu menyusun elemen – elemen dengan urutan tertentu, naik atau turun. Terdapat 3 metode dalam sorting, yaitu bubble sort (nilai yang besar akan naik, sedangkan nilai yang kecil akan turun), selection sort (mencari nilai data terbesar atau terkecil dan kemudian menempatkannya pada posisi yang sebenarnya), dan insertion sort (dengan menyisipkan).
 Contoh sorting selection sort :
20 | 35 | 18 | 8 | 14 | 41 | 3 | 39
A[1] —- tukar —- A[7]
3 | 35 | 18 | 8 | 14 | 41 | 20 | 39
A[2] —- tukar —- A[4]
3 | 8 | 18 | 35 | 14 | 41 | 20 | 39
3 | 8 | 14 | 35 | 18 | 41 | 20 | 39
3 | 8 | 14 |  18 | 35 | 41 | 20 | 39
3 | 8 | 14 |  18 | 20 | 41 | 35 | 39
3 | 8 | 14 |  18 | 20 | 35 | 41 | 39
3 | 8 | 14 |  18 | 20 | 35 |  39 | 41