ALGORITMA PENGURUTAN DATA
A. Selection Sort
Algoritma
selection sort dapat dirangkum sebagai berikut
1. Temukan nilai yang paling minimum (atau sesuai keinginan) di dalam struktur data. Jika ascending, maka yang harus ditemukan adalah nilai yang paling minimum. Jika descending, maka temukan nilai yang paling maksimum.
2. Tukar nilai tersebut dengan nilai pada posisi pertama di bagian struktur data yang belum diurutkan
3. Ulangi langkah di atas untuk bagian struktur data yang tersisa.
Contoh Program :
1.
Mulai.
void siftDown(int arr[], int start, int end) {
/** start dan end berada dalam jangkauan array yang terdefinisi dengan start < end **/
/** Menata array dalam jangkauan sesuai kriteria sifat heap **/
/** deklarasi **/
int root=start; // pencarian dimulai dari root
int child; // menyimpan indeks anak yang diperiksa
int inswap; // indeks untuk swap
int temp;
/** sift ketika root masih memiliki anak **/
/** indeks anak ada di 2*root+1 dan 2*root+2 **/
while(2*root+1 <= end) {
child = 2*root+1; // dapatkan data anak
inswap = root;
/** Ambil elemen terbesar dan letakkan di root **/
if(arr[inswap] < arr[child])
inswap = child;
if(child+1 <= end)
if(arr[inswap] < arr[child+1])
inswap = child+1;
if(root!=inswap) {
// pertukarkan
temp = arr[root];
arr[root] = arr[inswap];
arr[inswap] = temp;
// track down, buat agar struktur heap di bawah konsisten
root = inswap;
} else return;
}
}
//————————————————————————————
void heapify(int arr[], int n) {
/** n = jumlah elemen di array **/
/** heapidy membentuk heap dengan bantuan siftdown. Hasil akhirnya adalah array yang tertata sesuai sifat heap **/
/** mulai heapify dari tengah dan terus naik hingga indeks 0 **/
int start=(n-2)/2;
for(int i=start; i>=0; i–)
siftDown(arr,i,n-1);
}
//————————————————————————————
D. - Quick Sort
1. Temukan nilai yang paling minimum (atau sesuai keinginan) di dalam struktur data. Jika ascending, maka yang harus ditemukan adalah nilai yang paling minimum. Jika descending, maka temukan nilai yang paling maksimum.
2. Tukar nilai tersebut dengan nilai pada posisi pertama di bagian struktur data yang belum diurutkan
3. Ulangi langkah di atas untuk bagian struktur data yang tersisa.
Script program:
/*Selection
Sort*/
#include
<iostream>
#include
<iomanip>
using
namespace std;
void
SelectionSort (int array [], const int size)
{
int i,j,kecil,temp;
for (i=0; i<size; i++)
{
kecil=i;
for(j=i+1;
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;
}
Contoh Program :
2.
Membaca file header.
3.
Membaca fungsi, int, kecil, temp.
4.
Membaca perulangan beserta fungsi kecil dan temp.
5.
Membaca fungsi utama, fungsi numlist dan temp.
6.
Membaca perulangan.
7.
Cetak hasil.
8.
Tampilan data sebelum diurutkan.
9.
Membaca fungsi metode selection sorting.
10.
Membaca perulangan.
11.
Cetak hasil.
12.
Tampilan data setelah diurutkan.
13.
Selesai.
c B. Exchange Sort
Cara pengurutan exchange sort :
Prosedur Exchange Sort :
void exchange_sort(int data[])
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(data[i]<data[j])
tukar(&data[i],&data[j]);
}
}
}
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(data[i]<data[j])
tukar(&data[i],&data[j]);
}
}
}
- C. Selection Sort
Contoh simulasi algoritma selection
sort sbb :
jika kita memiliki elemen array sbb : {5, 1, 12, -5, 16, 2, 12, 14}
jika kita memiliki elemen array sbb : {5, 1, 12, -5, 16, 2, 12, 14}
Algoritma di dalam
Selection Sort terdiri dari kalang bersarang. Dimana kalang tingkat pertama
(disebut pass) berlangsung N-1 kali. Di dalam kalang kedua, dicari elemen dengan
nilai terkecil. Jika didapat, indeks yang didapat ditimpakan ke variabel min.
Lalu dilakukan proses penukaran. Begitu seterusnya untuk setiap Pass. Pass
sendiri makin berkurang hingga nilainya menjadi semakin kecil. Berdasarkan
operasi perbandingan elemennya.
implementasinya
dalam bahasa pemrograman sbb :
/**
*
* @author Edi Zhou
*/
public class selectionSort {
*
* @author Edi Zhou
*/
public class selectionSort {
int[] angka={5, 1, 12, -5, 16, 2, 12, 14};
public selectionSort()
{
public selectionSort()
{
tampilkanAngka();
urutkanAngka();
tampilkanAngka();
}
urutkanAngka();
tampilkanAngka();
}
void tampilkanAngka()
{
System.out.println(“\n——————————–“);
for (int i=0;i<angka.length;i++)
{
System.out.print(angka[i]+” “);
}
}
{
System.out.println(“\n——————————–“);
for (int i=0;i<angka.length;i++)
{
System.out.print(angka[i]+” “);
}
}
void urutkanAngka()
{
int tampung;
for (int i=0;i<angka.length-1;i++)
{
int minindek=i;
for(int j=i+1;j<angka.length;j++)
{
if(angka[j]<angka[minindek])
minindek=j;
{
int tampung;
for (int i=0;i<angka.length-1;i++)
{
int minindek=i;
for(int j=i+1;j<angka.length;j++)
{
if(angka[j]<angka[minindek])
minindek=j;
if(minindek!=i)
{
{
tampung=angka[i];
angka[i]=angka[minindek];
angka[minindek]=tampung;
}
}
//tampilkanAngka();
}
angka[i]=angka[minindek];
angka[minindek]=tampung;
}
}
//tampilkanAngka();
}
}
public static void main(String[] aksi)
{
selectionSort urut = new selectionSort();
}
}
{
selectionSort urut = new selectionSort();
}
}
-
Heap Sort
Program Heap Sort :
Source code:void siftDown(int arr[], int start, int end) {
/** start dan end berada dalam jangkauan array yang terdefinisi dengan start < end **/
/** Menata array dalam jangkauan sesuai kriteria sifat heap **/
/** deklarasi **/
int root=start; // pencarian dimulai dari root
int child; // menyimpan indeks anak yang diperiksa
int inswap; // indeks untuk swap
int temp;
/** sift ketika root masih memiliki anak **/
/** indeks anak ada di 2*root+1 dan 2*root+2 **/
while(2*root+1 <= end) {
child = 2*root+1; // dapatkan data anak
inswap = root;
/** Ambil elemen terbesar dan letakkan di root **/
if(arr[inswap] < arr[child])
inswap = child;
if(child+1 <= end)
if(arr[inswap] < arr[child+1])
inswap = child+1;
if(root!=inswap) {
// pertukarkan
temp = arr[root];
arr[root] = arr[inswap];
arr[inswap] = temp;
// track down, buat agar struktur heap di bawah konsisten
root = inswap;
} else return;
}
}
//————————————————————————————
void heapify(int arr[], int n) {
/** n = jumlah elemen di array **/
/** heapidy membentuk heap dengan bantuan siftdown. Hasil akhirnya adalah array yang tertata sesuai sifat heap **/
/** mulai heapify dari tengah dan terus naik hingga indeks 0 **/
int start=(n-2)/2;
for(int i=start; i>=0; i–)
siftDown(arr,i,n-1);
}
//————————————————————————————
void heapsort(int arr[], int n) {
/** n = jumlah elemen di array **/
/** lakukan heapify untuk menciptakan heap semu **/
heapify(arr,n);
/** tercipta heap, elemen terbesar ada di root (indeks 0)
* lakukan iterasi untuk setiap langkah, pindahkan root ke akhir,
* decrement indeks dan lakukan penataan ulang lagi
*/
int end=n-1;
int temp;
while(end>0) {
// pindahkan root ke akhir
temp = arr[0];
arr[0] = arr[end];
arr[end]= temp;
// majukan end
end -= 1;
// lakukan penataan ulang dengan siftDown
siftDown(arr,0,end);
}
}
/** n = jumlah elemen di array **/
/** lakukan heapify untuk menciptakan heap semu **/
heapify(arr,n);
/** tercipta heap, elemen terbesar ada di root (indeks 0)
* lakukan iterasi untuk setiap langkah, pindahkan root ke akhir,
* decrement indeks dan lakukan penataan ulang lagi
*/
int end=n-1;
int temp;
while(end>0) {
// pindahkan root ke akhir
temp = arr[0];
arr[0] = arr[end];
arr[end]= temp;
// majukan end
end -= 1;
// lakukan penataan ulang dengan siftDown
siftDown(arr,0,end);
}
}
D. - Quick Sort
Contoh
dari proses Soring dengan menggunakan metode Quick Sort
Dalam Procedure Pascal :
Procedure Quick(Var Temp : Data;
Awal, Akhir : Integer);
Var I,J :
Integer;
Procedure ATUR;
Begin
I:=Awal +1;
J:= Akhir;
While Temp[I] < Temp[Awal] Do Inc(I);
While Temp[J] > Temp[Awal] Do
Dec(J);
While I < J Do
Begin
SWAP(Temp[I], Temp[J]);
While Temp[I] < Temp[Awal] Do Inc(I);
While Temp[J] > Temp[Awal] Do Dec(J);
End;
SWAP(Temp[Awal], Temp[J]);
End;
Begin
If Awal < Akhir Then
Begin
ATUR;
Quick(Temp, Awal, J-1);
Quick(Temp,J+1,Akhir);
End;
End;
-
Merge Sort
Ilustrasi dari
algoritma merge sort adalah sebagai berikut:
Algoritma
mergesort(S,C)
Input: n elemen
dari data S dan comparator C
Output: data S
terurut berdasarkan C
if S.size()>1
(S1,S2)
← partisi(S,n/2)
mergesort(S1,C)
mergesort(S2,C)
S ← merge(S1,S2)
Fungsi merge berfungsi
untuk menggabungkan hasil pengurutan dari sub
bagian S1 dan S2
berdasarkan urutan tertentu (ascending atau descending
order). Kompleksitas
proses penggabungan ini (merging) adalah O(n).
Algoritma dari
proses penggabungan adalah :
Algoritma
merge(S1,S2)
Input: data S1 dan
S2 dengan n/2 elemen per data
Output: data
terurut dari penggabungan S1 È S2
S ← data
kosong
while not S1.empty()
and not S2.empty()
if S1.first().elemen()
< S2.first().elemen()
S.insert(S1.remove(S1.first())
else
S.insert(S2.remove(S2.first())
while not S1.empty()
S.insert(S1.remove(S1.first())
while not S2.empty()
S.insert(S2.remove(S2.first())
return S
E . Shell sort (pengembangan insertion)
Contoh dari proses Sorting dengan
menggunakan metode Shell Sort :
Dalam Procedure Pascal
:
Procedure Shell(Var Temp : Data;
JmlData : Integer);
Var I,J, Jarak : Integer;
Begin
Jarak := JmlData Div 2;
While Jarak > 0 Do
Begin
For I:=1 To JmlData-Jarak
Do
Begin
J := I + Jarak;
If Temp[I] > Temp[J] Then
SWAP(Temp[I], Temp[Lok]);
End;
Jarak :=
Jarak Div 2;
End;
End;
Komentar
Posting Komentar