Rabu, 30 September 2020

Struktur Data Pertemuan 18 Sorting

 Pengertian Sorting pada C++. Salah satu bagian penting dari struktur data adalah proses pengurutan data. Data terkadang akan berada dalam bentuk yang tidak berpola ataupun dengan pola tertentu yang tidak kita inginkan. Namun dalam penggunaannya, kita akan selalu ingin menggunakan data tersebut dalam bentuk yang rapi atau berpola sesuai dengan yang kita inginkan. Maka dari itu proses sorting adalah proses yang sangat penting dalam struktur data. Proses pengurutan banyak ditemukan dalam pemrosesan komputer. Data yang sudah terurut memiliki beberapa keuntungan. Selain mempercepat pencarian, data yang sudah terurut juga dapat dengan mudah menentukan Nilai terbesar atau terkecil.

Pengurutan data memang sangat relevan dan merupakan aktivitas yang sangat penting berkaitan dengan pemrosesan data. Bahkan pengurutan data telah banyak dilakukan dengan bantuan alat. Adanya kebutuhan terhadap peroses pengurutan memunculkan bermacam-macam metode pengurutan yang bertujuan untuk memperoleh metode pengurutan yang optimal.

Pengurutan data (sorting) adalah suatu proses untuk menyusun kembali himpunan obyek menggunakan aturan tertentu.



Secara umum ada dua jenis pengurutan data yaitu :

a. Pengurutan secara urut naik (Ascending)

 yaitu dari data yang nilainya paling kecil sampai data yang nilainya paling besar.

b. Pengurutan secara urut turun (Descending)

yaitu dari data yang mempunyai nilai yang paling besar sampai paling kecil.


Sebagai contoh misalkan diberikan data berupa bilangan berikut ini:
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.  

Beberapa metode yang dapat digunakan untuk pengurutan antara lain:

  1. Bubble Sort
  2. Selection Sort
  3. Quick Sort
  4. Merge Sort
  5. Heap Sort
  6. Shell Sort
  7. Radix Sort
  8. Tree Sort
  9. Maximum Sort
  10. Insertion Sort

Dua hal yang mempengaruhi kecepatan algoritma sortir adalah :
1. Jumlah operasi perbandingan yang dilakukan.
2. Jumlah operasi pemindahan data dilakukan.

Pada garis besarnya ada tiga teknik utama yang dapat dilakukan dalam
melakukan sortir yaitu :
1. Sortir Penyisipan atau Insertion Sort.
2. Sortir Pemilihan atau Selection Sort.
3. Sortir Penukaran atau Exchange 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();
}



























Tidak ada komentar:

Posting Komentar