Selasa, 24 Mei 2011

Jenis sorting


Metode Partisi Array dalam Quick sort.

Implementasi quick sort:

Algoritma :
            Subrutin quick_sort(L,p,r)
            jika p < r maka
            q = partisi (L,p,r)
            quick_sort(L,p,q)
            quick_sort(L,q,t,r)
            AKHIR-JIKA
            AKHIR-SUBRUTIN

Untuk mengurutkan isi keseliruhan larik L, diperlukan pemanggilan sebagai berikut :
                          quick_sort (L,0,jimlah_elemen (L)-1)
                        subrutin partisi sendiri sebagai berikut :
                                    Subritin partisi (L,p,r)
                        X L [p]
                        i p
                        Jr
                        ULANG SELAMA BENAR
                                    ULANG SELAMA L[ j]  > x
J  j-1
AKHIR-ULANG
ULANG SELAMA L[ i] < x
            ii + 1
AKHIR-ULANG
Jika r < J maka
// Tukaran L[ i] dengan L [ j]
Tmp = L[ i]
L[ i]  L [ j]
L [ j]  tmp
Sebaliknya
Nilai –balik j
Akhir-jika
Akhir-ulang
Akhir-subrutin


Metode Insertion Sort

Mirip dengan cara orang mengurutkan kartu, selembar demi selembar kartu diambil dan disisipkan (insert) ke tempat yang seharusnya. Pengurutan dimulai dari data ke-2 sampai dengan data terakhir, jika ditemukan data yang lebih kecil, maka akan ditempatkan (diinsert) diposisi yang seharusnya. Pada penyisipan elemen, maka elemen-elemen lain akan bergeser ke belakang


Source Code Insertion Sort :
void insertion_sort(int data[])
{
int temp;
for(int 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;
}
}

Implementasi program Insertion Sort dalam bahasa C++ :

01#include <iostream.h>
02#include <conio.h>
03
04int data[10],data2[10];
05int n;
06
07void tukar(int a, int b)
08{
09 int t;
10 t = data[b];
11 data[b] = data[a];
12 data[a] = t;
13}
14
15void insertion_sort()
16{
17 int temp,i,j;
18 for(i=1;i<=n;i++)
19 {
20  temp = data[i];
21  j = i -1;
22  while(data[j]>temp && j>=0)
23  {
24   data[j+1] = data[j];
25   j--;
26  }
27 data[j+1] = temp;
28 }
29}
30int main()
31{
32 cout<<"===PROGRAM INSERTION SORT==="<<endl;
33
34 //Input Data
35 cout<<"Masukkan Jumlah Data : ";
36 cin>>n;
37 for(int i=1;i<=n;i++)
38 {
39  cout<<"Masukkan data ke "<<i<<" : ";
40  cin>>data[i];
41  data2[i]=data[i];
42 }
43
44 insertion_sort();
45
46 cout<<"\n\n";
47 //tampilkan data
48 cout<<"Data Setelah di Sort : ";
49 for(int i=1; i<=n; i++)
50 {
51  cout<<" "<<data[i];
52 }
53 cout<<"\n\nSorting Selesai";
54 getch();
55 return 0;
56}


Buble Sort

Metode buble merupakan metode sorting termudah. Diberi nama “Bubble” karena proses pengurutan secara berangsur-angsur bergerak/berpindah ke posisinya yang tepat, seperti gelembung yang keluar dari sebuah gelas bersoda. Bubble Sort mengurutkan data dengan cara membandingkan elemen sekarang dengan elemen berikutnya.
Pengurutan Ascending :Jika elemen sekarang lebih besar dari elemen berikutnya maka kedua elemen tersebut ditukar.
Pengurutan Descending: Jika elemen sekarang lebih kecil dari elemen berikutnya, maka kedua elemen tersebut ditukar.
Algoritma ini seolah-olah menggeser satu per satu elemen dari kanan ke kiri atau kiri ke kanan, tergantung jenis pengurutannya, asc atau desc. Ketika satu proses telah selesai, maka bubble sort akan mengulangi proses, demikian seterusnya sampai dengan iterasi sebanyak n-1.
Kapan berhentinya?  Bubble sort berhenti jika seluruh array telah diperiksa dan tidak ada pertukaran lagi yang bisa dilakukan, serta tercapai perurutan yang telah diinginkan
Contoh:
Urutkan data dari:
22 10 15 3 8 2
Pengecekan dapat dimulai dari data paling awal atau paling akhir. Pada contoh di bawah ini pengecekan dimulai dari data paling akhir. Data paling akhir dibandingkan dengan data di depannya, jika ternyata lebih kecil maka tukar. Dan pengecekan yang sama dilakukan sampai dengan data yang paling awal.

Kembali data paling akhir di bandingkan dengan data di depannya jika ternyata lebih kecil maka tukar, tetapi kali ini pengecekan di lakukan sampai data paling awal yaitu 2 karena data tersebut pasti merupakan data terkecil (didapat dari hasil pengurutan pada langkah ke 1)

Proses pengecekan pada langkah 3 dst. sama dengan langkah sebelumnya.

sourch code buble sort versi 1
untuk urutan ascending
 
void bubble_sort(int data[])
{
for (int i=1;i<n;i++)
{
for(int j=n-1;j>=1;j–)
{
if (data[j]<data[j-1])
tukar(&data[j],&data[j-1); //ascending
}
}
}


buble sort versi 2
untuk urutan descending
void bubblesort2(int data[])
{
for (int i=1;i {
for(int j=0;jdata[j+1])
tukar(&data[j],&data[j+1); //descending
}
}
}

Implementasi dalam bahasa Pemrograman C++

#include <iostream.h>
#include <conio.h>

int data[10],data2[10];
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; j>=i; j–)
  {
   if(data[j] < data[j-1]) tukar(j,j-1);
  }
 }
}
int main()
{
 cout<<"===PROGRAM BUBBLE SORT==="<<endl;

 //Input Data
 cout<<"Masukkan Jumlah Data : ";
 cin>>n;
 for(int i=1;i<=n;i++)
 {
  cout<<"Masukkan data ke "<<i<<" : ";
  cin>>data[i];
  data2[i]=data[i];
 }