Program C++ Pengurutan (Sorting) Data Acak dengan Metode Bubble Sort, Selection Sort, dan Shell Sort


Script

#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define MAX 1

bubble();
SelectionSort();
shell();
int pilihan,hitung,i;
char ulang,pilih;
char nx[10];
int data[MAX];
int data1[100];
int temp;
int n;
int cek(char str[])
{
 int i, panjang;
 panjang=strlen(str);
 for(i=0;i<panjang;i++)
 {
 if((i==0)&&(str[i]=='-'))
 i++;
 if(!isdigit(str[i]))
 {
 cout<<"Input salah ! Ulangi input !\n";
 return 0;
 }
 }
 return 1;
}
int main()
{
awal :
clrscr();
do
 {
/*int n;
 for (hitung=0;hitung<8;hitung++)
 data1[hitung]=data[hitung]; */
cout<<"========================"<<endl;
 cout<<"| Program Sorting Data |"<<endl;
 cout<<"========================"<<endl;
 cout<<" "<<endl<<endl;
 cout<<"Masukkan Banyak Data : ";
 cin>>nx;
 cout<<endl;
 }
while(!cek(nx));
 n=atoi(nx);
 int data[100];
 srand(time(NULL));
 int i;
 for(i=0;i<n;i++)
 {
 data[i]= rand()%n;
 cout<<data[i]<<" ";
 }
cout<<endl;
{
 for (hitung=0;hitung<n;hitung++)
 data1[hitung]=data[hitung];
cout<<"\n==========================\n";
 cout<<"| Pilihan Metode Sorting |\n";
 cout<<"--------------------------\n";
 cout<<"| 1.Bubble sort |\n";
 cout<<"| 2.Selection sort |\n";
 cout<<"| 3.Shell sort |\n";
 cout<<"==========================\n\n";
cout<<"Pilih Metorde Sorting <1-3>: ";
 cin>>pilihan;
 cout<<"------------------------------------------------\n";
 cout<<"Pilihan pengurutan Ascending/Descending [a/d]? ";
 cin>>pilih;
 switch (pilihan)
 {
 case 1:
 bubble();
 break;
 case 2:
 SelectionSort();
 break;
 case 3:
 shell();
 break;
 default:
 cout<<"kode salah";
 break;
 }

 cout<<"\nUrutlan Lagi? [y/t]";
 cin>>ulang;
 cout<<"\n\n";
 if (ulang=='y'||ulang=='Y')
 {
 goto awal;
 }
 else
 {
 exit(1);
 }
 }
}

bubble()
{
 cout<<"------------------------------------------------\n";
 for (int i=0; i<n-1; i++)
 for (int ii=0; ii<n-1; ii++)
 if (data1[ii]>=data1[ii+1])
 {
 temp=data1[ii];
 data1[ii]=data1[ii+1];
 data1[ii+1]=temp;
 }
if (pilih=='a')
 {
 cout<<"\nMenjalankan metode Bubble Sort dengan pengurutan Ascending";
 cout<<"\n\nHasil Pengurutan: \n\n";
 for(int iii=0; iii<n; iii++)
 cout<<data1[iii]<<" ";
 }
 if (pilih=='d')
 {
 cout<<"\nMenjalankan metode Bubble Sort dengan pengurutan Descending";
 cout<<"\n\nHasil Pengurutan: \n\n";
 for(int iii=n-1; iii>=0; iii--)
 cout<<data1[iii]<<" ";
 }
 cout<<"\n";
}

SelectionSort()
{
 cout<<"------------------------------------------------\n";
 int kecil;
 for (int i=0;i<n;i++)
 {
 kecil=i;
 for (int j=kecil+1; j<n;j++)
 {
 if (data1[kecil]>data1[j])
 {kecil=j;}
 }
 temp=data1[i];
 data1[i]=data1[kecil];
 data1[kecil]=temp;
 }
if (pilih=='a')
 {
 cout<<"\nMenjalankan metode Selection Sort dengan pengurutan Ascending";
 cout<<"\n\nHasil Pengurutan: \n\n";
 for(int iii=0; iii<n; iii++)
 cout<<data1[iii]<<" ";
 }
 if (pilih=='d')
 {
 cout<<"\nMenjalankan metode Selection Sort dengan pengurutan Dscending";
 cout<<"\n\nHasil Pengurutan: \n\n";
 for(int iii=n-1; iii>=0; iii--)
 cout<<data1[iii]<<" ";
 }
 cout<<"\n";
}

shell()
{
 cout<<"------------------------------------------------\n";
int gap=n/2;
 do
 {
 int swap;
 do
 
 {
 swap=0;
 for(int i=0;i<n-gap;i++)
 if(data1[i]>data1[i+gap])
 {
 int t=data1[i];
 data1[i]=data1[i+gap];
 data1[i+gap]=t;
 swap=1;
 }
 }
 while(swap);
 }
 while(gap=gap/2);

if (pilih=='a')
 {
 cout<<"\nMenjalankan metode Shell Sort dengan pengurutan Ascending";
 cout<<"\n\nHasil Pengurutan: \n\n";
 for(i=0;i<n;i++)
 cout<<data1[i]<<" ";
 }
 if (pilih=='d')
 {
 cout<<"\nMenjalankan metode Shell Sort dengan pengurutan Desscending";
 cout<<"\n\nHasil Pengurutan: \n\n";
 for(i=n-1;i>=0;i--)
 cout<<data1[i]<<" ";
 }
cout<<endl;
}

HasilScreenHunter_202 Feb. 22 16.35

ScreenHunter_201 Feb. 22 16.35

ScreenHunter_200 Feb. 22 16.35

Baca lebih lanjut

Program C++ Pengurutan (Sorting) dengan Metode Radix Sort


Script

/* quick sort*/
# include <iostream.h>
# include <iomanip.h>
# include <conio.h>
//void quickSort(int[],int);
void q_sort(int[],int,int);

int main ()
{
 int NumList[8]={5,34,32,25,75,42,22,2};
 // int temp;
 cout<<" Data Sebelum diurutkan: \n";
 for(int d=0;d<8;d++)
 {
 cout<<setw(3)<<NumList[d];
 }
 cout<<"\n\n";
 q_sort(NumList,0,8);
 cout<<" Data setelah diurutkan: \n";
 for(int iii=0;iii<8;iii++)
 cout<<setw(3)<<NumList[iii]<<endl<<endl;
 // quickSort(NumList,8);
 getch();
}
/*
void quickSort(int numbers[],int array_size)
{
 q_sort(numbers,0,array_size-1);
}
 */
void q_sort(int numbers[],int left,int right)
{
 int pivot,l_hold,r_hold;
 l_hold=left;
 r_hold=right;
 pivot=numbers[left];
 while(left<right)
 {
 while((numbers[right]>=pivot)&&(left<right))
 right--;
 if(left!= right)
 {
 numbers[left]=numbers[right];
 left++;
 }
 while((numbers[left]<=pivot)&&(left<right))
 {
 left++;
 }
 if (left!=right)
 {
 numbers[right]=numbers[left];
 right--;
 }
 }
 numbers[left]=pivot;
 pivot=left;
 left=l_hold;
 right=r_hold;
 if(left<pivot)
 q_sort(numbers,left,pivot-1);
 if(right>pivot)
 q_sort(numbers,pivot+1,right);
 }

Hasil

ScreenHunter_200 Feb. 22 16.28

Program C++ Pengurutan (Sorting) dengan Metode Quick Sort


Script

/* quick sort*/
# include <iostream.h>
# include <iomanip.h>
# include <conio.h>

//void quickSort(int[],int);
void q_sort(int[],int,int);

int main ()
{
 int NumList[8]={5,34,32,25,75,42,22,2};
 // int temp;
 cout<<" Data Sebelum diurutkan: \n";
 for(int d=0;d<8;d++)
 {
 cout<<setw(3)<<NumList[d];
 }
 cout<<"\n\n";
 q_sort(NumList,0,8);
 cout<<" Data setelah diurutkan: \n";
 for(int iii=0;iii<8;iii++)
 cout<<setw(3)<<NumList[iii]<<endl<<endl;
 // quickSort(NumList,8);
 getch();
}
/*
void quickSort(int numbers[],int array_size)
{
 q_sort(numbers,0,array_size-1);
}
 */
void q_sort(int numbers[],int left,int right)
{
 int pivot,l_hold,r_hold;
 l_hold=left;
 r_hold=right;
 pivot=numbers[left];
 while(left<right)
 {
 while((numbers[right]>=pivot)&&(left<right))
 right--;
 if(left!= right)
 {
 numbers[left]=numbers[right];
 left++;
 }
 while((numbers[left]<=pivot)&&(left<right))
 {
 left++;
 }
 if (left!=right)
 {
 numbers[right]=numbers[left];
 right--;
 }
 }
 numbers[left]=pivot;
 pivot=left;
 left=l_hold;
 right=r_hold;
 if(left<pivot)
 q_sort(numbers,left,pivot-1);
 if(right>pivot)
 q_sort(numbers,pivot+1,right);
 }

Hasil

ScreenHunter_200 Feb. 22 16.25

Program C++ Pengurutan (Sorting) dengan Metode Shell Sort


Script

/*Shell sort*/
#include <iostream.h>
#include <conio.h>
int main (void)
{
 int array[5];
 int length=5;
 int i,d;
 int tmp, flag;
for (i=0;i<length;i++)
 {
 cout<<"Enter a number :";
 cin>>array[i];
 }
d=length;
 flag=i;

 while(flag||(d>1))
 {
 flag=0;
 d=(d+1)/2;
 for(i=0;i<(length-d);i++)
 {
 if(array [i+d]>array[i])
 {
 tmp=array[i+d];
 array[i+d]=array[i];
 array[i]=tmp;
 flag=1;
 }
 }
 }
for(i=0;i<5;i++)
 {
 cout<<array[i]<<endl;
 }
 getche();
}

Hasil

ScreenHunter_198 Feb. 22 16.20

Program C++ Pengurutan (Sorting) dengan Metode Selection Sort


Script

/*selection Sort*/
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
int selectionsort (int array[], const int size)
 {
 int i, j, kecil, temp;
 for (i=0; i<size; i++)
 {
 kecil=i;
 for (j=i; j<size; j++)
 {
 if (array[kecil]>array[j])
 {kecil = j;}
 }
 temp = array [i];
 array[i] = array[kecil];
 array[kecil] = temp;
 
 }
 }

int main()
{
 int NumList[8] = {5, 34, 32, 25, 75, 42, 22, 2};
 int temp;
 cout<<"Data sebelum diurutkan: \n";
 for (int d=0; d<8; d++)
 {
 cout<<setw(3)<<NumList[d];
 }
 
 cout<<"\n\n";
 selectionsort(NumList,8);
 
 cout<<"Data setelah diurutkan:\n";
 for (int iii=0; iii<8; iii++)
 cout<<setw(3)<<NumList[iii]<<endl<<endl;
 getche ();
}

Hasil

ScreenHunter_198 Feb. 22 16.16

Program C++ Pengurutan Data (Sorting) dengan Metode Bubble Sort


Script

/*program sorting data dengan metode buble short*/

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
int main ()
{
 int NumList [8]={5,34,32,25,75,42,22,2};
 int temp;
 cout<<"Data Sebelum Diurutkan : \n";
 for(int d=0;d<8;d++)
 {
 cout<<setw(3)<<NumList[d];
 }
 
 cout<<"\n\n";for (int i =0; i<8;i++)
 for(int i=0; i<7;i++)
 if (NumList[i]>=NumList[i+1])
 {
 temp = NumList[i];
 NumList[i]=NumList[i+1];
 NumList[i+1]=temp;
 }
 cout<<"Data setelah diurutkan :\n";
 for (int i=0;i<7;i++)
 cout<<setw(3)<<NumList[i]<<endl<<endl;


getche ();
}

Hasil

ScreenHunter_198 Feb. 22 16.12

Sistem Bus


Komputer tersusun atas beberapa komponen penting seperti CPU, memori, perangkat I/O. Setiap komponen saling berhubungan membentuk kesatuan fungsi. Sistem bus adalah penghubung bagi keseluruhan komponen komputer dalam menjalankan tugasnya. Transfer data antar komponen komputer sangatlah mendominasi kerja suatu komputer. Data atau program yang tersimpan dalam memori dapat diakses dan dieksekusi CPU melalui perantara bus, begitu juga kita dapat melihat hasil eksekusi melalui monitor juga menggunakan sistem bus.

Struktur Interkoneksi 

Memori :

Memori umumnya terdiri atas N word memori dengan panjang yang sama. Masing–masing word diberi alamat numerik yang unik (0, 1, 2, …N-1). Word dapat dibaca maupun ditulis pada memori dengan kontrol Read dan Write. Lokasi bagi operasi dispesifikasikan oleh sebuah alamat.

Modul I/O :

Operasi modul I/O adalah pertukaran data dari dan ke dalam komputer. Berdasakan pandangan internal, modul I/O dipandang sebagai sebuah memori dengan operasi pembacaan dan penulisan. Seperti telah dijelaskan pada bab 6 bahwa modul I/O dapat mengontrol lebih dari sebuah perangkat peripheral. Modul I/O juga dapat mengirimkan sinyal interrupt.

CPU :

CPU berfungsi sebagai pusat pengolahan dan eksekusi data berdasarkan routine–routine program yang diberikan padanya. CPU mengendalikan seluruh sistem komputer sehingga sebagai konsekuensinya memiliki koneksi ke seluruh modul yang menjadi bagian sistem komputer.

Gambar 1. Modul Komputer

Gambar 1. Modul Komputer

Dari jenis pertukaran data yang diperlukan modul–modul komputer, maka struktur interkoneksi harus mendukung perpindahan data.

  • Memori ke CPU : CPU melakukan pembacaan data maupun instruksi dari memori.
  • CPU ke Memori : CPU melakukan penyimpanan atau penulisan data ke memori.
  • I/O ke CPU : CPU membaca data dari peripheral melalui modul I/O.
  • CPU ke I/O : CPU mengirimkan data ke perangkat peripheral melalui modul I/O.
  • I/O ke Memori atau dari Memori : digunakan pada sistem DMA

Sampai saat ini terjadi perkembangan struktur interkoneksi, namun yang banyak digunakan saat ini adalah sistem bus.

Sistem bus

  1. Digunakan secara tunggal
  2. Digunakan secara jamak,

Hal ini Tergantung karakteristik sistemnya

Interkoneksi Bus – Struktur Bus

Sebuah bus biasanya terdiri atas beberapa saluran. Sebagai contoh bus data terdiri atas 8 saluran sehingga dalam satu waktu dapat mentransfer data 8 bit. Secara umum fungsi saluran bus dikatagorikan dalam tiga bagian, yaitu :

  • Saluran data
  • Saluran alamat
  • Saluran kontrol

Gambar 2. Pola Interkoneksi

Gambar 2. Pola Interkoneksi

Saluran Data

Lintasan bagi perpindahan data antar modul. Secara kolektif lintasan ini disebut bus data. Umumnya jumlah saluran terkait dengan panjang word, misalnya 8, 16, 32 saluran.

Tujuan : agar mentransfer word dalam sekali waktu.

Jumlah saluran dalam bus data dikatakan lebar bus, dengan satuan bit, misal lebar bus 16 bit

Saluran Alamat (Address Bus)

  • Digunakan untuk menspesifikasi sumber dan tujuan data pada bus data.
  • Digunakan untuk mengirim alamat word pada memori yang akan diakses CPU.
  • Digunakan untuk saluran alamat perangkat modul komputer saat CPU mengakses suatu modul.
  • Semua peralatan yang terhubung dengan sistem komputer, agar dapat diakses harus memiliki alamat.

Contoh : mengakses port I/O, maka port I/O harus memiliki alamat hardware-nya

Saluran kontrol (Control Bus)

Digunakan untuk mengontrol bus data, bus alamat dan seluruh modul yang ada.

Karena bus data dan bus alamat digunakan oleh semua komponen maka diperlukan suatu mekanisme kerja yang dikontrol melalui bus kontrol ini.

Sinyal – sinyal kontrol terdiri atas

  • Sinyal pewaktuan adalah Sinyal pewaktuan menandakan validitas data dan alamat
  • Sinyal–sinyal perintah adalah Sinyal perintah berfungsi membentuk suatu operasi

Prinsip Operasi Bus

  1. Meminta penggunaan bus.
  2. Apabila telah disetujui, modul akan memindahkan data yang diinginkan ke modul yang dituju

Hierarki Multiple Bus

Bila terlalu banyak modul atau perangkat dihubungkan pada bus maka akan terjadi penurunan kinerja

Faktor – faktor :

  1. Semakin besar delay propagasi untuk mengkoordinasikan penggunaan bus.
  2. Antrian penggunaan bus semakin panjang.
  3. Dimungkinkan habisnya kapasitas transfer bus sehingga memperlambat data.

Gambar 3. Arsitektur bus jamak tradisional

Gambar 3. Arsitektur bus jamak tradisional

Arsitektur bus jamak

Prosesor, cache memori dan memori utama terletak pada bus tersendiri pada level tertinggi karena modul – modul tersebut memiliki karakteristik pertukaran data yang tinggi.

Pada arsitektur berkinerja tinggi, modul – modul I/O diklasifikasikan menjadi dua,

  • Memerlukan transfer data berkecepatan tinggi
  • Memerlukan transfer data berkecepatan rendah.

Modul dengan transfer data berkecepatan tinggi disambungkan dengan bus berkecepatan tinggi pula,

Modul yang tidak memerlukan transfer data cepat disambungkan pada bus ekspansi

Gambar 4. Arsitektur bus jamak kinerja tinggi

Gambar 4. Arsitektur bus jamak kinerja tinggi

Keuntungan hierarki bus jamak kinerja tinggi

  1. Bus berkecepatan tinggi lebih terintegrasi dengan prosesor.
  2. Perubahan pada arsitektur prosesor tidak begitu mempengaruhi kinerja bus

Sumber : http://sawitri8580.wordpress.com/2009/07/31/4/

Baca lebih lanjut