Sorting
Struktur Data - Pertemuan 18
"Sorting"
Pengertian
Sorting
Sorting
adalah sesuatu proses aplikasi dimana yang awalnya acak -acakkan lalu
diurutkan dalam sebuah sekumpulan objek menurut urutan atau susunan sesuai
dengan kebutuhan agar ketata rapi. Tujuan dari penggunaan sorting adalah
memudahkan seseorang dalam pencarian, menyusun data yang awalnya acak – acakkan
menjadi keurut, dan menyeselaikan masalah yang kompleks seperti schedulling,
pengolahan basis data dan lain – lain.
Dua Macam Pengurutan
Ø Ascending
(urut naik) merupakan pengurutan dari angka yang nilainya lebih kecil kemudian
menuju ke nilainya yang lebih besar.
Ø Descending
(urut turun) adalah sebaliknya, yaitu pengurutan dari nilainya yang lebih besar
kemudian menuju ke nilainya yang lebih kecil.
Sebagai
contoh misalkan diberikan data berupa bilangan berikut ini:
3 9 1 4 0 2
Hasil sorting:
3 9 1 4 0 2
Hasil sorting:
Ø Ascending
adalah
0 1 2 3 4 9
Ø Descending
adalah
9 4 3 2 1 0.
Berdasarkan
media yang digunakan terdapat 2 metode sortir :
1. Sortir
Internal
Metode ini
dipakai jika himpunan data yang akan disortir kecil, sehingga proses sortir
tidak membutuhkan tempat yang besar di memori utama komputer.
2. Sortir
Eksternal
Metode ini
dipakai jika himpunan data yang akan disortir cukup besar, sehingga dibutuhkan
media atau alat tambahan seperti Magnetik Tape, Disket dan sebagainya.
Dua hal yang
mempengaruhi kecepatan algoritma sortir adalah :
1. Jumlah
operasi perbandingan yang dilakukan.
2. Jumlah
operasi pemindahan data dilakukan.
Jenis Jenis Sorting
A. Bubble
Sort
Adalah
pengurutan yang dilakukan dengan membandingkan apakah data sebelum dengan
sesudahnya mana yang lebih besar atau kecil lalu ditukarkan secara terus
menerus sampai data tersebut kesusun menurut perintah yang dilakukan apakah
secara ascending atau descending.
Kelebihan
- Mudah
dipahami karena algoritma pengurutannya yang simpel
Kekurangan
- Lambat
dalam pengurutan dengan data dengan jumlah yang lebih besar
- Memakan
waktu yang lama karena harus membandingkan data satu persatu meskipun ada
yang sudah terurut
Proses
pengurutan menggunakan Bubble Sort
- Pertama
membandingkan data ke – i dengan data ke (i+1).Jika tidak sesuai
dengan kententuan urutan apakah ascending atau descending maka tukar.
- Terus
bandingkan data sampai ke data yang terakhir .
- Proses
akan terhenti bila membandingkan data sampai data yang terakhir.
Contoh : Apabila terdapat daftar angka 390, 205, 182, 45, 235, lakukan
sorting dengan Teknik Bubble Sort.
B. Selection
Sort
Adalah
pengurutan yang dilakukan dengan cara mencari nilai maksimum atau minimum yang
dimulai dari data posisi 0 hingga ke posisi N-1. Ada 2 cara pengurutan di dalam
selection sort yaitu seleksi maksimum dan minimum .Seleksi maksimum adalah
memilih elemen maksimum sebagai pengurutan sedangkan seleksi minimum
adalah memilih elemen minimum sebagai pengurutan.
Kelebihan
- Operasi
pentukaran hanya sekali saja
- Tidak
memakan waktu yang lama
Kekurangan
- Sulit
dalam membagi masalah
Proses
pengurutan menggunakan Selection Sort
- Mencari
data terkecil dalam interval j=0 sampai j=N-1.
- Jika
pada posisi posditemukan data yang terkecil, tukarkan data
diposisi pos dengan data di posisi i jika k. dan
ulangi sampai data sudah keurut.
Contoh bila diketahui list angka 390, 205, 182, 45, 235 dilakukan
sorting dengan teknik Selection Sort.
C. Insertion
Sort
Adalah
pengurutan yang dilakukan dengan cara menyisipkan elemen pada posisi yang sudah
ditentukan atau tepat .
Kelebihan
- Stabil
- Penerapannya
yang sederhana
- Pengurutan
data yang tercepat dalam jumlah elemen yang sedikit
Kelemahan
- Banyak
operasi yang dilakukan dalam mencari posisi elemen yang tepat
- Untuk
data dalam jumlah besar tidak praktis
Contoh : untuk list angka yang sama seperti diatas, yaitu
: 390, 205, 182, 45, 235 lakukan Sorting dengan teknik Insertion Sort
Program menu sorting :
#include<time.h>
#include<iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
int main() {
int pil;
cout << "======= Program Sorting (Bubble, Insertion, Selection) =========="<<endl<<endl;
cout << "1. Bubble sort" <<endl;
cout << "2. Insertion sort" <<endl;
cout << "3. Selection sort" <<endl<<endl;
cout << "==============================="<<endl<<endl;
cout << "Masukan pilihan anda = "; cin >> pil;
switch(pil) {
////////////////////////////////////
//// Buble start /////////////
////////////////////////
case 1:
system("cls");
cout << endl;
cout << "Bubble sort"<<endl;
cout << "=============="<<endl;
int t1,t2;
int hold;
int array[5];
cout<<"Masukan 5 angka :"<<endl;
for(int i=0; i<5; i++) {
cout << " angka ke " <<i+1 <<" = ";cin>>array[i];
}
cout<<endl;
cout<<endl;
t1=GetTickCount();
cout<<"Sebelum di sortir = ";
for(int j=0; j<5; j++) {
cout<<array[j];
cout<<" ";
}
cout<<endl;
cout <<endl<< "Urutan program"<<endl;
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
if(array[j]<array[j+1]) {
hold=array[j];
array[j]=array[j+1];
array[j+1]=hold;
for(int i=0; i<5; i++) {
cout<<array[i]<<" ";
}
cout<<endl;
}
}
}
cout<<endl;
cout<<"Setelah di sortir = ";
for(int i=0; i<5; i++) {
cout<<array[i]<<" ";
}
cout<<endl;
t2=GetTickCount();
cout << endl <<"Lama proses = " << (int)(t2 - t1) << " ms";
cout<<endl;
break;
//////////////////////////////////////////////////////////
/////// Insertion start /////////
////////////////////////////////////////////////
case 2:
system("cls");
cout << "Insertion sort";
cout <<endl<<"============="<<endl;
cout<<endl;
int t3,t4;
int Key;
int array1[5];
cout<<"Masukan 5 angka : "<<endl;
for(int i=0; i<5; i++) {
cout << " angka ke " <<i+1 <<" = ";cin>>array1[i];
}
cout<<endl;
t3=GetTickCount();
cout<<"Angka sebelum di sortir = ";
for(int j=0; j<5; j++) {
cout<<array1[j]<<" ";
}
cout<<endl;
cout<<endl<< "Data proses "<<endl;
for(int j=1 ; j < 5 ; j++) {
Key = array1[j];
int i = j-1;
while(i >= 0 && array1[i] < Key) {
array1[i + 1] = array1[i];
i = i - 1;
}
array1[i + 1] = Key;
for(int l=0; l<5; l++) {
cout<<array1[l]<<" ";
}
cout<<endl;
}
cout<<endl<<"Angka setelah disortir = ";
for(int i=0; i<5; i++) {
cout<<array1[i]<<" ";
}
t4=GetTickCount();
cout << endl<<endl <<"Lama proses = " << (int)(t4 - t3) << " ms";
cout<<endl;
break;
////////////////////////////////////////////////////////
////////////// Selection start /////////////////////
/////////////////////////////////////
case 3:
system("cls");
cout << "Selection sort";
cout <<endl<< "================="<<endl<<endl;
int t5,t6;
int arr[5];
int mini,temp;
cout<<"masukan 5 angka ="<<endl;
for(int i=0; i<5; i++) {
cout << " angka ke " <<i+1 <<" = ";cin>>arr[i];
}
t5=GetTickCount();
cout<<endl;
cout<<"Angka sebelum di sortir = ";
for(int j=0; j<5; j++) {
cout<<arr[j]<<" ";
}
for(int r1=0;r1<4;r1++) {
mini=r1;
for(int r2=r1+1; r2<5; r2++)
if(arr[r2]>arr[mini])
mini=r2;
if(mini !=r1) {
temp=arr[r1];
arr[r1]=arr[mini];
arr[mini]=temp;
}
}
cout<<endl;
cout<<endl;
cout<<"Setelah di sortir = ";
for(int q=0; q<5; q++) {
cout<<arr[q]<< " " ;
}
t6=GetTickCount();
cout << endl<<endl <<"Lama proses = " << (int)(t6 - t5) << " ms";
cout<<endl;
break;
//////////////////////////////////////////
////// PILIHAN TIDAK ADA /////////
//////////////////////////////////////////
default:
system("cls");
cout << "Pilihan tidak ada";
break;
}
getch();
}
#include<iostream>
#include<conio.h>
#include<windows.h>
using namespace std;
int main() {
int pil;
cout << "======= Program Sorting (Bubble, Insertion, Selection) =========="<<endl<<endl;
cout << "1. Bubble sort" <<endl;
cout << "2. Insertion sort" <<endl;
cout << "3. Selection sort" <<endl<<endl;
cout << "==============================="<<endl<<endl;
cout << "Masukan pilihan anda = "; cin >> pil;
switch(pil) {
////////////////////////////////////
//// Buble start /////////////
////////////////////////
case 1:
system("cls");
cout << endl;
cout << "Bubble sort"<<endl;
cout << "=============="<<endl;
int t1,t2;
int hold;
int array[5];
cout<<"Masukan 5 angka :"<<endl;
for(int i=0; i<5; i++) {
cout << " angka ke " <<i+1 <<" = ";cin>>array[i];
}
cout<<endl;
cout<<endl;
t1=GetTickCount();
cout<<"Sebelum di sortir = ";
for(int j=0; j<5; j++) {
cout<<array[j];
cout<<" ";
}
cout<<endl;
cout <<endl<< "Urutan program"<<endl;
for(int i=0; i<4; i++) {
for(int j=0; j<4; j++) {
if(array[j]<array[j+1]) {
hold=array[j];
array[j]=array[j+1];
array[j+1]=hold;
for(int i=0; i<5; i++) {
cout<<array[i]<<" ";
}
cout<<endl;
}
}
}
cout<<endl;
cout<<"Setelah di sortir = ";
for(int i=0; i<5; i++) {
cout<<array[i]<<" ";
}
cout<<endl;
t2=GetTickCount();
cout << endl <<"Lama proses = " << (int)(t2 - t1) << " ms";
cout<<endl;
break;
//////////////////////////////////////////////////////////
/////// Insertion start /////////
////////////////////////////////////////////////
case 2:
system("cls");
cout << "Insertion sort";
cout <<endl<<"============="<<endl;
cout<<endl;
int t3,t4;
int Key;
int array1[5];
cout<<"Masukan 5 angka : "<<endl;
for(int i=0; i<5; i++) {
cout << " angka ke " <<i+1 <<" = ";cin>>array1[i];
}
cout<<endl;
t3=GetTickCount();
cout<<"Angka sebelum di sortir = ";
for(int j=0; j<5; j++) {
cout<<array1[j]<<" ";
}
cout<<endl;
cout<<endl<< "Data proses "<<endl;
for(int j=1 ; j < 5 ; j++) {
Key = array1[j];
int i = j-1;
while(i >= 0 && array1[i] < Key) {
array1[i + 1] = array1[i];
i = i - 1;
}
array1[i + 1] = Key;
for(int l=0; l<5; l++) {
cout<<array1[l]<<" ";
}
cout<<endl;
}
cout<<endl<<"Angka setelah disortir = ";
for(int i=0; i<5; i++) {
cout<<array1[i]<<" ";
}
t4=GetTickCount();
cout << endl<<endl <<"Lama proses = " << (int)(t4 - t3) << " ms";
cout<<endl;
break;
////////////////////////////////////////////////////////
////////////// Selection start /////////////////////
/////////////////////////////////////
case 3:
system("cls");
cout << "Selection sort";
cout <<endl<< "================="<<endl<<endl;
int t5,t6;
int arr[5];
int mini,temp;
cout<<"masukan 5 angka ="<<endl;
for(int i=0; i<5; i++) {
cout << " angka ke " <<i+1 <<" = ";cin>>arr[i];
}
t5=GetTickCount();
cout<<endl;
cout<<"Angka sebelum di sortir = ";
for(int j=0; j<5; j++) {
cout<<arr[j]<<" ";
}
for(int r1=0;r1<4;r1++) {
mini=r1;
for(int r2=r1+1; r2<5; r2++)
if(arr[r2]>arr[mini])
mini=r2;
if(mini !=r1) {
temp=arr[r1];
arr[r1]=arr[mini];
arr[mini]=temp;
}
}
cout<<endl;
cout<<endl;
cout<<"Setelah di sortir = ";
for(int q=0; q<5; q++) {
cout<<arr[q]<< " " ;
}
t6=GetTickCount();
cout << endl<<endl <<"Lama proses = " << (int)(t6 - t5) << " ms";
cout<<endl;
break;
//////////////////////////////////////////
////// PILIHAN TIDAK ADA /////////
//////////////////////////////////////////
default:
system("cls");
cout << "Pilihan tidak ada";
break;
}
getch();
}
Hai Milaa :) | seneng aku kenal kamuu
BalasHapus