SORTING
Sort adalah proses pengurutan data yang tadinya tersusun secara acak
sehingga menjadi tersusun secara teratur menurut suatu aturan tertentu.
Pada umunya terdapat 2 macam jenis pengurutan, yaitu :
• Ascending : PENGURUTAN DARI NILAI TERKECIL MENUJU NILAI
TERBESAR. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
• DESCENDING: PENGURUTAN DARI NILAI TERBESAR MENUJU NILAI
TERKECIL. 10, 9, 8, 7, 6, 5, 4, 3, 2, 1.
Selain jenis pengurutan di atas, pada bagian kali ini kita juga akan membahas
mengenai metode – metode yang dapat digunakan untuk melakukan sorting.
Metode – metodenya yaitu :
METODE SORT
• SEDERHANA
• LANJUT
QUICK, MERGE
3
SELECTION SORT
5
Contoh program Selection Sort dalam bahasa C yang dapat ditest di komputer
#include<stdio.h>
#define n 7
void main()
{ int A[n] = {15, 10, 7, 22, 17, 5,12 }; Menyiapkan array
int X, I, K; dan isinya
printf(“Sebelum di sort\n”);
for (I=0; I <= n-1; I++)
Mencetak isi array
printf(“ %d”, A[I]; ) sebelum disort
printf(“\n”);
K = 0; 15 10 7 22 17 5 12
while (K <= n-2)
{ J = K; I = K+1;
while(I <= n-1)
{ if(A[I] < A[J]) Proses
J = I; Selection Sort
I++;
}
X = A[J];
A[J] = A[K]
A[K] = X;
Tercetak :
Mencetak isi array
sesudah di sort
5 7 10 12 15 17 22
Prinsip Kerja dari Bubble Sort adalah :
1. Pengecekan mulai dari data ke-1 sampai data
ke-n
2. Bandingkan data ke-n dengan data sebelumnya
(n-1)
3. Jika lebih kecil maka pindahkan bilangan
tersebut dengan bilangan yg ada didepannya
( sebelumnya ) satu persatu (n-1,n-2,n-3,....dst)
4. Jika lebih besar maka tidak terjadi pemindahan
5. Ulangi langkah 2 dan 3 s/d sort optimal.
Latihan
• Lakukan proses sorting untuk beberapa elemen data di bawah ini
dengan menggunakan metode Bubble sort
• 42 23 74 11 65
• 58 33 78 94 98 12 36
• 28 30 5 15 25 100
• 35 70 75 80 85 60 55 50 45
INSERTION SORT
Prinsip dasar Insertion adalah secara berulang-ulang menyisipkan / memasukan
setiap elemen. ke dlm posisinya / tempatnya yg benar.
Algoritma
1. Prinsip Kerja Insertion Sort adalah
2. Pengecekan mulai dari data ke-1 sampai data ke-n
3. Bandingkan data ke-I ( I = data ke-2 s/d data ke-n )
4. Bandingkan data ke-I tersebut dengan data sebelumnya
(I-1), Jika lebih kecil maka data tersebut dapat disisipkan
ke data awal sesuai dgn posisisi yg seharusnya
5. Lakukan langkah 2 dan 3 untuk bilangan berikutnya ( I=
I+1 ) sampai didapatkan urutan yg optimal.
Latihan
• Lakukan proses sorting untuk beberapa elemen data di bawah ini
dengan menggunakan metode insertion sort
• 42 23 74 11 65
• 58 33 78 94 98 12 36
• 28 30 5 15 25 100
• 35 70 75 80 85 60 55 50 45
Merge Sort
• Merge Sort
Algoritma dirumuskan dalam 3 langkah berpola divide-and-conquer.
Berikut menjelaskan langkah kerja dari Merge sort.
• Divide : Memilah elemen – elemen dari rangkaian data menjadi dua
bagian.
• Conquer : Conquer setiap bagian dengan memanggil prosedur merge sort
secara rekursif
• Kombinasi : Mengkombinasikan dua bagian tersebut secara rekursif untuk
mendapatkan rangkaian data berurutanProses rekursi berhenti jika
mencapai elemen dasar. Hal ini terjadi bilamana bagian yang akan
diurutkan menyisakan tepat satu elemen. Sisa pengurutan satu elemen
tersebut menandakan bahwa bagian tersebut telah terurut sesuai
rangkaian.
Prosedure devide
• Prosedure membentuk tree sort merge
• Membagi 2 elemen dengan cara ( low + high)/2
• Lakukan s/d elemen menjadi tunggal
Prosedure Conquer
• Balik bentuk tree sort
• Call setiap elemen sesuai dengan posisinya
• Sort setiap box pada tree call
Program
#include <iostream> cout<<endl;
#include <conio>
void MergeSort(int low, int high); MergeSort(1,elemen);
void Merge(int , int , int ); cout<<endl;
int A[50];
int main() cout<<"Setelah di mergesort: \n\n";
{ for(i=1;i<=elemen;i++)
int i, elemen; {
cout<<"Berapa banyak elemen yang ingin disusun ? "; cout<< A[i] <<" ";
cin>>elemen; }
cout<<endl; cout<< endl << endl;
cout<<"Masukkan " <<elemen<<" elemen: getch();
\n";cout<<endl;
}
for(i=1;i<=elemen;i++)
{
cout << "Elemen ke-"<<i<<" = ";
cin>>A[i];
}
void Merge(int low, int mid, int high)
Program {
//prosedure Mergesort int h,i,j,k,b[50];
void MergeSort(int low, int high) h=low;
{ i=low;
int mid; j=mid+1;
if(low<high) while((h<=mid)&&(j<=high))
{ {
mid = (low+high)/2; if(A[h]<A[j])
MergeSort(low,mid); {
MergeSort(mid+1, high); b[i]=A[h];
Merge(low, mid, high); h++; }
} else{
} b[i]=A[j];
j++; }
i++;
}
Program
if(h>mid) {
for(k=j;k<=high;k++)
{ b[i]=A[k];
i++; }
}
else{
for(k=h;k<=mid;k++)
{
b[i]=A[k];
i++;
}
}
for(k=low;k<=high;k++)
{ A[k]=b[k];
}
}
Latihan
• Lakukan proses sorting untuk beberapa elemen data di bawah ini
dengan menggunakan metode merge sort
• 42 23 74 11 65
• 58 33 78 94 98 12 36
• 28 30 5 15 25 100
• 35 70 75 80 85 60 55 50 45
QUICK SORT
algoritma sorting yang berdasarkan pembandingan dengan metode
divide andconquer (bagi dan kuasai)
Algoritma quick sort mengurutkan dengan sangat cepat, namun algoritma ini
sangatkomplex dan diproses secara rekursif. Sangat memungkinkan untuk
menulis algoritma yanglebih cepat untuk beberapa kasus khusus, namun
untuk kasus umum, sampai saat ini tidak adayang lebih cepat dibandingkan
algoritma quick sort
Prinsip Kerja dari Quick Sort adalah :
1. Tentukan Lower Bound (Batas Bawah) & Upper
Bound (Batas Atas)
2. Bandingkan Lower Bound (LB) dengan Upper
Bound (UB)
3. Jika LB>UB, Tukar (cari operasi perbandingan
yang optimal/terkecil)
4. Jika LB =< UB, maka Next Upper Bound & Lower
Bound
5. Ulangi langkah diatas s/d sort.
Algoritma Quick Sort
Latihan
• Lakukan proses sorting untuk beberapa elemen data di bawah ini
dengan menggunakan metode merge sort
• 42 23 74 11 65
• 58 33 78 94 98 12 36
• 28 30 5 15 25 100
• 35 70 75 80 85 60 55 50 45
• 22 10 15 3 8 2
Algoritma untuk mencari elemen MaxMin :
PROCEDURE STRAITMAXMIN(A,n,i,max,min)
int i,n, A [n], max,min
max min A[0]
FOR i 1 To n
IF A[i] > max; max A[i];
ELSE IF A[i] < min ; min A[i] ENDIF
ENDIF
REPEAT
END STRAITMAXMIN
BEST CASE
• Keadaan yg tercapai jika elemen pada himpunan
A disusun secara increasing (menaik). Dengan
perbandingan waktu n - 1 kali satuan operasi.