Kamis, 04 Juni 2015

SORTING PADA C++



SORTING : SELECTION, INSERTION, DAN BUBBLE SORT
SORTING
Sorting (Pengurutan Data) dapat didefinisikan sebagai suatu proses untuk menyusun kembali humpunan obyek menggunakan aturan tertentu. Tujuan dari sorting yaitu memudahkan dalam pencarian anggota dari suatu himpunan.
Ada banyak jenis metode sorting, yaitu ada :
1)   Selection Sort;
2)   Insertion Sort;
3)   Bubble Sort;
4)   Radix Sort;
5)   Merge Sort;
6)   Shell Sort;
7)   Quick Sort; dll.
Disini saya akan membahas 3 metode sorting saja yaitu selection, insertion, dan bubble sort.
Dalam metode sorting, ada 2 macam pengurutan, yaitu pengurutan data dari kecil ke besar (Ascending), dan pengurutan data dari yang terbesar ke terkecil (Descending).

SELECTION SORT
Metode seleksi adalah pengurutan data dengan cara mencari data yang terkecil kemudian menukarnya dengan data yang digunakan sebagai acuan (pivot).
Proses dari Selection Sort Ascending adalah sebagai berikut :
1.    Mencari data terkecil dari data pertama sampai dengan data yang terakhir. Kemudian posisinya ditukar dengan data yang pertama.
2.    Mencari data terkecil dari data kedua sampai dengan data terakhir, kemudian posisinya ditukar dengan data yang kedua.
3.    Mencari data terkecil dari data ketiga sampai dengan data terakhir, kemudian posisinya ditukar dengan data yang ketiga.
4.    Begitu seterusnya sampai semua data terurut naik. Apabila terdapat n buah data yang akan diurutkan, maka membutuhkan (n-1) langkah pengurutan, dengan data terakhir, yaitu data ke n tidak perlu diurutkan karena hanya tinggal data satu-satunya.
Untuk proses dari Selection Sort Descending (mencari data terbesar) adalah kebalikan dari proses di atas.
Sebagai contoh :
Terdapat suatu variable array dimana nilai dalam array tersebut :
NILAI[8] = { 44, 55, 12, 42, 94, 18, 6, 67 }
Penyelesaiannya adalah :
Agar lebih jelasnya kita langsung saja ke studi kasusnya dan source codenya pada borland C++ :
Selection Sort Ascending
Inputkan banyaknya data yang akan dilakukan sorting (max. 10). Inputkan data sesuai dengan banyaknya data yang diminta, kemudian urutkanlah data tersebut dari yang terkecil ke yang terbesar!
Source code :
#include<iostream.h>
#include<conio.h>

int data[10];
int n;

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

void main()
{
int pos,i,j;

cout<<"-------------------------------------------------"<<endl;
cout<<"SELECTION SORT ASCENDING"<<endl;
cout<<"-------------------------------------------------"<<endl;
cout<<"INPUTKAN BANYAK DATA = ";
cin>>n;
cout<<"-------------------------------------------------"<<endl;

for(int i=0;i<n;i++)
{
cout<<"INPUTKAN DATA KE-"<<(i+1)<<" = " ;
cin>>data[i];
}
cout<<"-------------------------------------------------"<<endl;
cout<<"DATA YANG DIINPUTKAN :"<<endl;
for(i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"-------------------------------------------------"<<endl;

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<<"DATA YANG TELAH DIURUTKAN SECARA ASCENDING : "<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;

cout<<"-------------------------------------------------"<<endl;
cout<<"SELECTION SORT SELESAI !"<<endl;
cout<<"-------------------------------------------------"<<endl;
getch();
}
Berikut ini hasil dari source code di atas :

Selection Sort Descending
Buatlah program seperti diatas, tetapi urutkan data dari yang terbesar ke terkecil.
Source code :
#include<iostream.h>
#include<conio.h>

int data[10];
int n;

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

void main()
{
int pos,i,j;

cout<<"-------------------------------------------------"<<endl;
cout<<"SELECTION SORT DESCENDING"<<endl;
cout<<"-------------------------------------------------"<<endl;
cout<<"INPUTKAN BANYAK DATA = ";
cin>>n;
cout<<"-------------------------------------------------"<<endl;

for(int i=0;i<n;i++)
{
cout<<"INPUTKAN DATA KE-"<<(i+1)<<" = " ;
cin>>data[i];
}
cout<<"-------------------------------------------------"<<endl;
cout<<"DATA YANG DIINPUTKAN :"<<endl;
for(i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"-------------------------------------------------"<<endl;

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<<"DATA YANG TELAH DIURUTKAN SECARA DESCENDING : "<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;

cout<<"-------------------------------------------------"<<endl;
cout<<"SELECTION SORT SELESAI !"<<endl;
cout<<"-------------------------------------------------"<<endl;
getch();
}
Hasilnya jika telah di run adalah :


INSERTION SORT
Pada metode insertion sort, proses pengurutannya dimulai dari data ke-2 (indeks ke-1), kemudian disisipkan pada tempat yang sesuai. Dan data pertama (data pada indeks ke-0) dianggap sudah pada tempatnya.
Kita coba saja langsung ke studi kasus dan source codenya :
Insertion Sort Ascending
Studi Kasus :
Buatlah program seperti selection di atas, dan urutkan data tersebut dari terkecil ke terbesar dengan menggunakan metode insertion sort.
Source code :
#include<iostream.h>
#include<conio.h>

int data[10];
int n;

void main()
{
int tmp,i,j;

cout<<"-------------------------------------------------"<<endl;
cout<<"INSERTION SORT ASCENDING"<<endl;
cout<<"-------------------------------------------------"<<endl;
cout<<"INPUTKAN BANYAKNYA DATA = ";
cin>>n;
cout<<"-------------------------------------------------"<<endl;
for(int i=0;i<n;i++)
{
cout<<"INPUTKAN DATA KE-"<<(i+1)<<" = " ;
cin>>data[i];
}

cout<<"-------------------------------------------------"<<endl;
cout<<"DATA YANG DIINPUTKAN :"<<endl;
for(i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"-------------------------------------------------"<<endl;

for(i=1;i<n;i++)
{
tmp=data[i];
j=i-1;
while(data[j]>tmp && j>=0)
{
data[j+1]=data[j];
j--;
}
data[j+1]=tmp;
}

cout<<"DATA YANG TELAH DIURUTKAN SECARA ASCENDING : "<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;

cout<<"-------------------------------------------------"<<endl;
cout<<"INSERTION SORT SELESAI !"<<endl;
cout<<"-------------------------------------------------"<<endl;
getch();
}
Berikut adalah hasilnya jika di run :

Insertion Sort Descending
Studi kasus :
Buatlah program yang sama, tetapi urutkan dari yang terbesar ke terkecil.
Source code :
#include<iostream.h>
#include<conio.h>

int data[10];
int n;

void main()
{
int tmp,i,j;

cout<<"-------------------------------------------------"<<endl;
cout<<"INSERTION SORT DESCENDING"<<endl;
cout<<"-------------------------------------------------"<<endl;
cout<<"INPUTKAN BANYAKNYA DATA = ";
cin>>n;
cout<<"-------------------------------------------------"<<endl;
for(int i=0;i<n;i++)
{
cout<<"INPUTKAN DATA KE-"<<(i+1)<<" = " ;
cin>>data[i];
}

cout<<"-------------------------------------------------"<<endl;
cout<<"DATA YANG DIINPUTKAN :"<<endl;
for(i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"-------------------------------------------------"<<endl;

for(i=1;i<n;i++)
{
tmp=data[i];
j=i-1;
while(data[j]<tmp && j>=0)
{
data[j+1]=data[j];
j--;
}
data[j+1]=tmp;
}

cout<<"DATA YANG TELAH DIURUTKAN SECARA DESCENDING : "<<endl;
for(int i=0;i<n;i++)
{
cout<<data[i]<<" ";
}
cout<<endl;

cout<<"-------------------------------------------------"<<endl;
cout<<"INSERTION SORT SELESAI !"<<endl;
cout<<"-------------------------------------------------"<<endl;
getch();
}
Berikut hasilnya jika di run :

BUBBLE SORT :
Dalam bubble sort, prosesnya adalah selalu membandingkan 2 data yang berdekatan atau disebelahnya.
Lebih jelasnya langsung saja ke studi kasus dan source codenya.
Bubble Sort Ascending
Studi Kasus :
Buatlah program seperti selection dan insertion sort di atas dengan menggunakan metode bubble sort, dan urutkan data tersebut dari yang terkecil ke terbesar.
Source code :
#include<iostream.h>
#include<conio.h>

int data[20];
int n;

void main()
{
int i, j, tmp;

cout<<"---------------------------------------------"<<endl;
cout<<"BUBBLE SORT ASCENDING"<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<"INPUTKAN BANYAKNYA DATA : ";
cin>>n;
cout<<"---------------------------------------------"<<endl;
for(i=0; i<n; i++)
{
cout<<"INPUTKAN BILANGAN KE-["<<(i+1)<<"] : ";
cin>>data[i];
}

cout<<"---------------------------------------------"<<endl;
cout<<"DATA YANG DIINPUTKAN : "<<endl;
for(i=0; i<n; i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"---------------------------------------------"<<endl;

for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(data[i]>data[j])
{
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}

cout<<"DATA SETELAH DIURUTKAN SECARA ASCENDING : "<<endl;
for(i=0; i<n; i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"---------------------------------------------"<<endl;
cout<<"BUBBLE SORT SELESAI !"<<endl;
cout<<"---------------------------------------------"<<endl;
getch();
}
Berikut hasilnya jika di run :

Bubble Sort Descending
Studi kasus :
Buatlah program seperti di atas, kemudian urutkan data dari terbesar ke terkecil.
Source code :
#include<iostream.h>
#include<conio.h>

int data[20];
int n;

void main()
{
int i, j, tmp;

cout<<"---------------------------------------------"<<endl;
cout<<"BUBBLE SORT DESCENDING"<<endl;
cout<<"---------------------------------------------"<<endl;
cout<<"INPUTKAN BANYAKNYA DATA : ";
cin>>n;
cout<<"---------------------------------------------"<<endl;
for(i=0; i<n; i++)
{
cout<<"INPUTKAN BILANGAN KE-["<<(i+1)<<"] : ";
cin>>data[i];
}

cout<<"---------------------------------------------"<<endl;
cout<<"DATA YANG DIINPUTKAN : "<<endl;
for(i=0; i<n; i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"---------------------------------------------"<<endl;

for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
if(data[i]<data[j])
{
tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}

cout<<"DATA SETELAH DIURUTKAN SECARA DESCENDING : "<<endl;
for(i=0; i<n; i++)
{
cout<<data[i]<<" ";
}
cout<<endl<<"---------------------------------------------"<<endl;
cout<<"BUBBLE SORT SELESAI !"<<endl;
cout<<"---------------------------------------------"<<endl;
getch();
}
Dan berikut hasil dari source code di atas jika di run :

SEKIAN MATERI SORTING DARI SAYA JIKA ADA KEKURANGAN SAYA MOHON MAAF
TERIMA KASIH
Sumber : Materi Dari Buku Algoritma Pemrograman Menggunakan C++ : Abdul Kadir dan Coding dari Dosen Praktikum Struktur Data : IB Ketut Surya Arnawa, S.Kom.

1 komentar: