SORTING (PENGURUTAN)
Tujuan Umum
1. Mampu melakukkan perancangan aplikasi menggunakan Strucktur Sorting
(Pengurutan).
2. Mampu melakukkan analisis pada algoritma Sorting yang dibuat
3. Mampu mengimplementasikan algoritma Sorting pada sebuah aplikasi secara
tepat dan efesien.
Tujuan Khusus
1. Mampu menjelaskan mengenai algoritma Sorting.
2. Mampu membuat dan mendeklarasikan struktur algoritma Sorting
3.
Mampu menerapkan dan mengimplementasikan algoritma Sorting
DASAR TEORI
Sorting merupakan suatu proses untuk menyusun kembali humpunan obyek menggunakan
aturan tertentu. Sorting disebut juga sebagai suatu algoritma untuk meletakkan kumpulan
elemen data kedalam urutan tertentu berdasarkan satu atau beberapa kunci dalam tiap-tiap
elemen. Pada dasarnya ada dua macam urutan yang biasa digunakan dalam suatu proses
sorting:
1. Urut naik (ascending)
Mengurutkan dari data yang mempunyai nilai paling kecil sampai paling besar
2. Urut turun (descending)
Mengurutkan dari data yang mempunyai nilai paling besar sampai paling kecil.
Mengapa harus melakukan sorting data? Ada banyak alasan dan keuntungan dengan
mengurutkan data. Data yang terurut mudah untuk dicari, mudah untuk diperiksa, dan mudah
untuk dibetulkan jika terdapat kesalahan. Data yang terurut dengan baik juga mudah untuk
dihapus jika sewaktu-waktu data tersebut tidak diperlukan lagi. Selain itu, dengan
mengurutkan data maka kita semakin mudah untuk menyisipkan data atapun melakukan
penggabungan data.
5. Quick Sort (Metode Quick)
6. Merge Sort (Metode Penggabungan
)
1. Insertion Sort
Cara kerja insertion sort sebagaimana namanya.Pertama-tama, dilakukan iterasi,
dimana di setiap iterasi insertion sort memindahkan nilai elemen,kemudian
menyisipkannya berulang-ulang sampai ketempat yang tepat. Begitu seterusnya
dilakukan. Dariproses iterasi, seperti biasa, terbentuklah bagian yangtelah di-sorting
dan bagian yang belum
Algoritma Insertion Sort
Algoritma Insertion Sort dapat dirangkum sebagai berikut:
1.) Simpan nilai Ti kedalam variabel sementara, dengan i = 1.
2.) Bandingkan nilainya dengan elemen sebelumnya.
3.) Jika elemen sebelumnya (Ti-1) lebih besar nilainya daripada Ti, maka tindih nilai
Ti dengan nilai Ti-1 tersebut. Decrement i (kurangi nilainya dengan 1).
4.) Lakukan terus poin ke-tiga, sampai Ti-1 ≤ Ti.
5.) Jika Ti-1 ≤ Ti terpenuhi, tindih nilai di Ti dengan variabel sementara yang
disimpan sebelumnya.
2. Selection Sort
Algoritma sorting sederhana yang lain adalahSelection Sort. Ide dasarnya adalah
melakukan beberapa kali pass untuk melakukan penyeleksianelemen struktur data.
Untuk sorting ascending(menaik), elemen yang paling kecil di antara
elemenelemenyang belum urut, disimpan indeksnya,kemudian dilakukan pertukaran
nilai elemen denganindeks yang disimpan tersebut dengan elemen yangpaling depan
yang belum urut. Sebaliknya, untuksorting descending (menurun), elemen yang
paling. besar yang disimpan indeksnya kemudian ditukar.
Algoritma Selection Sort
Algoritma selection sort dapat dirangkum sebagaiberikut:
1.) Temukan nilai yang paling minimum (atau sesuaikeinginan) 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. Bubble Sort
Bubble Sort merupakan cara pengurutan yangsederhana. Konsep dari ide dasarnya
adalah seperti“gelembung air” untuk elemen struktur data yangsemestinya berada
pada posisi awal. Cara kerjanyaadalah dengan berulang-ulang melakukan
traversal(proses looping) terhadap elemen-elemen struktur datayang belum
diurutkan. Di dalam traversal tersebut,nilai dari dua elemen struktur data
dibandingkan. Jikaternyata urutannya tidak sesuai dengan “pesanan”,maka
dilakukan pertukaran (swap). Algoritma sortingini disebut juga dengan comparison
sort dikarenakanhanya mengandalkan perbandingan nilai elemen
untukmengoperasikan elemennya.
Algoritma Bubble Sort
Algoritma bubble sort dapat diringkas sebagaiberikut, jika N adalah panjang
elemen struktur data, dengan elemen-elemennya adalah T1, T2, T3, …, TN-1,TN,
maka:
2.) Jika elemen pada TN-1 > TN , maka lakukan
pertukaran (swap). Jika tidak, lanjutkan ke
proses traversal berikutnya sampai bertemu
dengan bagian struktur data yang telah
diurutkan.
3.) Ulangi langkah di atas untuk struktur data
yang tersisa.
4. Quick Sort
Quick Sort adalah algoritma sorting yang terkenal yang dirancang oleh C.A.R. Hoare
pada tahun 1960 ketika bekerja untuk perusahaan manufaktur komputer saintifik kecil,
Elliott Brothers. Algoritma ini rekursif, dan termasuk paradigma algoritma divide and
conquer.
Algoritma Quick Sort
Algoritma ini terdiri dari 4 langkah utama:
1.) Jika struktur data terdiri dari 1 atau 0 elemenyang harus diurutkan, kembalikan
strukturdata itu apa adanya.
2.) Ambil sebuah elemen yang akan digunakansebagai pivot point (poin poros).
(Biasanyaelemen yang paling kiri.)
4.) Ulangi algoritma secara rekursif terhadapkedua paruh struktur data.
5. Merge Sort
Algoritma Merge Sort ditemukan oleh John vonNeumann di tahun 1945. Merge Sort
termasuk paradigma algoritma divide and conquer (kurang lebihberarti: bagi dan
atasi). Hal ini dikarenakan algoritma ini melakukan pembagian struktur data
sebelumkemudian dioperasi satu per satu. Intinya, algoritma ini menggunakan dua ide
utama sebagai berikut,
1.) Sebuah list yang kecil membutuhkan langkahyang lebih sedikit untuk pengurutan
daripadasebuah list yang besar.
2.) Untuk membentuk sebuah list terurut dari duabuah list terurut membutuhkan
langkah yanglebih sedikit daripada membentuk sebuah listterurut dari dua buah list
tak terurut. Contoh: hanya diperlukan satu kali traversal untukmasing-masing list
jika keduanya sudah terurut.
Algoritma Merge Sort
Algoritma Merge Sort sederhananya, dapat ditulis berikut:
1.) Bagi list yang tak terurut menjadi dua samapanjang atau salah satunya lebih
panjang satu elemen.
2.) Bagi masing-masing dari 2 sub-list secara rekursif sampai didapatkan list dengan
ukuran 1.
3.) Gabung 2 sublist kembali menjadi satu list terurut.
6. Shell Sort
dari elemen pertama tersebut. Kemudain elemen kedua kita bandingkan dengan eleen
lain dengan jarak yang sama seperti jarak yang sama seperti diatas. Demikian
seterusnya sampai seluruh elemen dibandingkan. Pada langkah kedua proses diulang
dengan langkah yang lebih kecil, pada langkah ketiga jarak tersebut diperkecil lagi
seluruh proses dihentikan jika jarak sudah sama dengan satu.
Contoh dari proses Sorting dengan menggunakan metode Shell Sort :
Percobaan 1
Algoritma dan Struktur Data
Nama Program
: Program Sorting Data dengan Metode buble sort.
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks
Script program
:
#include <iostream.h>
void main () {
int NumList [8]=(5,34,32,25,75,42,22,2); int temp;
cout<<"Data Sebelum Diurutkan : \n'; for (int d=1; d<8; d++)
(
cout<<setw(3)<<NumList(d); )
cout<<"\n\n";
for(int i=0; i<7; i++)
if (NumList[ii] >= NumList[ii+1]) (
temp=NumList[ii]
NumList[ii]=NumList[ii+1] NumList[ii+1]=temp
)
cout<<"Data Setelah Diurutkan : \n"; for(int iii=1; iii<8; iii++)
cout<<"setw(3)"<<NumList[iii]<<endl<<endl; }
Script yang benar :
/*program sorting data dengan metode bubble sort */ #include <iostream>
#include <iomanip> using namespace std; 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<7; i++)
for(int ii=0; ii<7; ii++)
if (NumList[ii] >= NumList[ii+1]) {
temp=NumList[ii];
NumList[ii]=NumList[ii+1]; NumList[ii+1]=temp;
}
cout<<"Data Setelah Diurutkan : \n"; for(int iii=0; iii<8; iii++)
cout<<setw(3)<<NumList[iii]<<endl<<endl; }
Output Program :
Algoritma :
1. Mulai.
4. Cetak hasil.
5. Tampilan data sebelum diurutkan.
6. Membaca fungsi perulangan.
7. Membaca fungsi metode bubble sort.
temp=NumList[ii];NumList[ii]=NumList[ii+1]; NumList[ii+1]=temp;
8. Cetak hasil.
9. Tampilan data setelah diurutkan.
10. Membaca fungsi perulangan.
11. Cetak hasil.
12. Selesai.
Deskripsi:
Program diatas mengurutkan data yang sudah ada dengan menggunakan
bubble sort. Cara enggunaan file header dalam program ini tidak sama dengan
penggunaan file header dalam MinGw atau Visual C++. Penulisan array menggunakan
[ ]. Apabila menggunakan fungsi setw maka menggunakan file header <iomanip>.
Sistematika bubble sort dalam pengeksekusian program diatas adalah melakukan
traversal untuk membandingkan dua elemen berdekatan yang dilakukan dari belakang,
tergantung perintahnya. yang diminta asscending atau desscending. maka
membandingkana mana angka yang lebih kecil atau lebih besar sesusai urutan tata
letaknya. jika lebih besar atau lebih kecil (tata urutannya salah) maka lakukan
pertukaran(swap). jika tidak kanjutkan ke proses traversal lainnya sampai urutannya
benar.
Percobaan 2
Algoritma dan Struktur Data
Nama Program
:
Program sorting data dengan selection sort.
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks
Script program
:
#include <iostream.h> #include <iomanip.h>
void SelectionSort (int Array [], const int Size) {
int i,j,kecil,temp; for (i=0; i<Size; i++)
kecil=i;
for(j=1; j<Size; j++) { if (Array[kecil]>Array[j]) {kecil=j;} } Array[i]=Array[kecil]; Array[kecil]=temp; temp= Array [i]; }
}
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; }
Script yang benar :
/*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<<"\n\n";
SelectionSort (NumList, 8);
cout<<"Data Setelah Diurutkan : \n"; for (int iii=0; iii<8; iii++)
cout<<setw(3)<<NumList[iii]<<endl<<endl; }
Output Program:
Algoritma :
1. Mulai.
2. Membaca fungsi,int, kecil, temp.
3. Membaca perulangan beserta fungsi kecil dan temp.
4. Membaca fungsi utama, fungsi numlist dan temp.
5. Membaca perulangan.
6. Cetak hasil.
7. Tampilan data sebelum diurutkan.
8. Membaca fungsi metode selection sorting.
9. Membaca perulangan.
10. Cetka hasil.
11. Tampilan data setelah diurutkan.
12. Selesai.
Program diatas menggunakan metode selection sort untuk mengurutkan
beberapa bilangan. Penulisan file header dalam code blocks perlu diperhatikan
karena tidak sama dengan penulisan script pada MinGw atau visual c++. Dalam
code blocks untuk penulisan fungsi atau rumus biasanya berwarna, jika terdapat
kesalahan pada saat pengeksekusian hal lain yang perlu diperhatikan adalah
penulisan rumus. Sistematika pengurutan bilangan dengan metode selection sort
adalah menemukan nilai paling minimum/maksimum sesuai dengan perintah
apakah assceding atau desscending. kemudia tukar nilai dengan nilai pada posisi
pertama pada bagian struktur data yang belum diurutkan. kemudian lakukan terus
penukaran nilai sampai semua struktur data tidak ada yang tdak di seleksi.
Percobaan 3
Algoritma dan Struktur Data
Nama Program
:
Program shell sort.
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks
Script program
:
/*shell sort*/ #include<iostream> using namespace std;
int main(void) {
int array[5]; // An array of integer int length = 5; // Length of the array int i, j, d;
int tmp, flag;
//some input
for(i=0; i<length; i++) {
cout<<"Enter a number: "; cin>>array[i];
}
//Algorithm d=length; flag=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; }
} }
//Some output for(i=0; i<5; i++) {
cout<<array[i]<<endl; }
}
Output Program :
Algoritma :
1. Mulai
2. Membaca fungsi main.
3. Membaca fungsi array yang didalamnya terdpat fungsi panjang.
4. Membaca perulangan.
9. Cetak hasil.
10. Selesai.
Deskripsi :
Program diatas menggunakan metode sheel short yang sistematika
membandingkan elemen pertama dengan elemen lain yang berada dalam jarak
yang sama namun yang lingkupnya paling jauh, begitu seterusnya sampai
membandingkan elemen pada jarak yang berdekatan satu sama lain.
Percobaan 4
Algoritma dan Struktur Data
Nama Program
:
Program Quick sort
.
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks.
Script program :
#include<iostream.h> #include<iomanip.h>void quickSort(int[], int); void q_sort(int[], int, int);
void 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";
quickSort (NumList,8);
cout<<"Data Setelah Diurutkan: \n"; for (int iii=0; iii<8; iii++)
cout<<"setw(3)"<<NumList[iii]<<endl<<endl; }
void quickSort(int numbers[], int array_size) {
void q_sort(int number[], 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) {
number[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); }
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";
quickSort (NumList,8);
cout<<"Data Setelah Diurutkan: \n"; for (int iii=0; iii<8; iii++)
cout<<setw(3)<<NumList[iii]<<endl<<endl; }
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); }
Algoritma :
1. Mulai
2. Membaca fungsi metode quick sort.
3. Membaca fungsi numlist [8], temp.
4. Membaca perulangan.
5. Pemanggilan fungsi quicksort.
6. Cetak hasil.
7. Tampilan data sebelum diurutkan.
8. Membaca fungsi quicksort (numlist,8).
9. Cetak hasil.
10. Tampilan data setelah diurutkan.
11. Selesai.
Deskripsi :
Program diatas menggunakan metode quick sort yang sistematika quick
sort adalah pertama jika struktur data terdiri dari 1/0 maka kembalikan struktur
data apa adanya, jangan diubah. kemudian ambil sebuah elemen yang akan
digunakan sebagai pivot biasanya elemen paling kiri. bagi struktur data menjad 2
bagian, satu dengan elemennyang lebih besar daripada pivot, dan lainnya dengan
elemen yang lebih kecil dengan pivot. ulangi terus secara rekursif terhadap kedua
pruh struktur tersebut.
Percobaan 5
Algoritma dan Struktur Data
Nama Program
:
Program Radix sort.
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks.
#include <iostream.h> #include <stdlib.h> #include <string.h>
void radix (int byte, long N, long *source, long *dest) {
long count[256]; long index[256];
memset(count, 0, sizeof (count));
for (int i-1; i<N; i++) count[((source[i])>>(byte*8))&0xff]++;
index[0]=0;
for(i=1; i<256; i++) index[i]=index[i-1]+count[i-1];
for(i=0; i<N; i++) dest [index[((source[i])>>(byte*8))&0xff]+ +]=
source[i]; }
void radixsort (long *source, long *temp, long N) {
radix (0, N, source, temp); radix (1, N, temp, source);
radix (2, N, source, temp); radix (3, N, temp, source); }
void make_random (long *data, long N) {
for(int i=0; i<N; i++) data[i]=rand()|(rand()<<16); }
long data [100]; long temp [100];
void main(void) {
make_random(data, 100); radixsort(data, temp, 100);
for(int i=0; i<100; i++) cout<<data[i]<<'\n'; }
/*Radix Sort*/ #include <iostream> #include <stdlib.h> #include <string.h> using namespace std;
void radix (int byte, long N, long *source, long *dest) {
long count[256]; long index[256];
memset(count, 0, sizeof (count));
for (int i=0; i<N; i++) count[((source[i])>>(byte*8))&0xff]++;
index[0]=0;
for(int i=1; i<256; i++)index[i]=index[i-1]+count[i-1];
for(int i=0; i<N; i++) dest
[index[((source[i])>>(byte*8))&0xff]++]= source[i];
}
void radixsort (long *source, long *temp, long N) {
radix (0, N, source, temp); radix (1, N, temp, source); radix (2, N, source, temp); radix (3, N, temp, source); }
void make_random (long *data, long N) {
for(int i=0; i<N; i++) data[i]=rand()|(rand()<<16); }
long data [100]; long temp [100];
int main(void) {
make_random(data, 100); radixsort(data, temp, 100);
Output Program :
Algoritma :
1. Mulai
2. Membaca fungsi utama radix.
3. Membaca rumus radix menggunakana memset.
4. Membaca perulangan.
5. Membaca fungsi radixsort.
6. Membaca fungsi make_random.
7. Membaca fungsi utama.
8. Pemanggilan fungsi make_random,radixsort.
9. Membaca perulangan.
Program diatas meggunakan metode radix sort yang sistematikanya adalah mengkategorikan
data-data menjadi sub kumpulan data sesuai dengan nilai
radix
-nya, mengkonkatenasinya,
kemudian mengkategorikannya kembali berdasar nilai
radix
lainnya.
Tugas Rumah 1
Algoritma dan Struktur Data
Nama Program
:
Program
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks.
Script program :
#include <stdio.h> #include <iostream> #include <stdlib.h> #include <conio.h>using namespace std;
int data[10],data2[10]; int n;
char p; void A_D()
{
printf("\n Pilihan Pengurutan Ascending/Descending (N/T) : "); scanf("%s",&p);
}
void tukar(int a,int b) {
int temp;
temp = data[b]; data[b] = data[a]; data[a] = temp; }
void bubble_sort() {
A_D();
for(int i=1;i<n;i++) {
for(int j=n-1;j>=i;j--) {
if(data[j]<data[j-1]) tukar(j,j-1);
} }
}
else if (p=='T'||p=='t') //Descending {
for(int i=1;i<n;i++){
for(int j=n-1;j>=i;j--){ if(data[j]>data[j-1]) tukar(j,j-1);
} }
}
cout<<"Bubble Sort Selesai, Silahkan Lihat Data Anda ke Menu No.8"<<endl;
}
void exchange_sort() {
A_D();
if (p=='N'||p=='n') {
for (int i=0; i<n-1; i++) {
for(int j = (i+1); j<n; j++) {
if (data [i] > data[j]) tukar(i,j);
} }
}
else if (p=='T'||p=='t') {
for (int i=0; i<n-1; i++) {
if (data [i] < data[j]) tukar(i,j);
} }
}
cout<<"Exchange Sort Selesai, Silahkan Lihat Data Anda ke Menu No.8"<<endl;
}
void selection_sort() {
int pos,i,j; A_D();
if (p=='N'||p=='n') {
for(i=0;i<n-1;i++) {
pos = i;
for(j = i+1;j<n;j++) {
if(data[j] < data[pos]) pos = j;
}
if(pos != i) tukar(pos,i); }
}
else if (p=='T'||p=='t') {
for(i=0;i<n-1;i++) {
pos = i;
for(j = i+1;j<n;j++) {
if(data[j] > data[pos]) pos = j;
}
if(pos != i) tukar(pos,i); }
}
}
void insertion_sort() {
int temp,i,j; A_D();
if (p=='N'||p=='n') {
for(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; }
}
else if (p=='T'||p=='t') {
for(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; }
}
cout<<"Insertion Sort Selesai, Silahkan Lihat Data Anda ke Menu No.8"<<endl;
}
void QuickSort(int L, int R) {
int mid;
A_D();
if (p=='N'||p=='n'){ i = L;
j = R;
mid = data[(L+R) / 2];
do {
while (data[i] < mid) i++; while (data[j] > mid) j--;
if (i <= j) {
tukar(i,j); i++;
j--; };
} while (i < j);
if (L < j) QuickSort(L, j); if (i < R) QuickSort(i, R); }
}
void shell_sort() {
int j,i,k,m,mid; A_D();
if (p=='N'||p=='n') {
for(m = n/2;m>0;m/=2) {
for(j = m;j< n;j++) {
for(i=j-m;i>=0;i-=m) {
break; else
{
mid = data[i];
data[i] = data[i+m]; data[i+m] = mid; }
} }
} }
else if (p=='T'||p=='t') {
for(m = n/2;m>0;m/=2) {
for(j = m;j< n;j++) {
for(i=j-m;i>=0;i-=m) {
if(data[i+m]<=data[i]) break;
else {
mid = data[i];
data[i] = data[i+m]; data[i+m] = mid; }
} }
} }
cout<<"Shell Sort Selesai, Silahkan Lihat Data Anda ke Menu No.8 "<<endl;
}
void Input_Data() {
printf("\n Masukkan jumlah data yang dibutuhkan : "); scanf("%d",&n);
printf("Masukkan data ke-%d : ",(i+1)); scanf("%d",&data[i]);
data2[i] = data[i]; }
}
void AcakLagi() {
for(int i=0;i<n;i++) {
data[i] = data2[i]; }
printf("\n Data sudah teracak\n"); }
void Tampil() {
printf("\n Data = "); for(int i=0;i<n;i++) {
printf("%d ",data[i]); }
printf("\n"); }
main() {
system("cls"); int pil;
do {
system("cls");
cout<<" >>>>>>>>>>>>>>><<<<<<<<<<<<<"<<endl; cout<<" | Program Sorting Data |"<<endl; cout<<" >>>>>>>>>>>>>>><<<<<<<<<<<<<"<<endl;
cout<<" [1] Input Data"<<endl;
cout<<"---"<<endl; cout<<" 2. Bubble Sort"<<endl;
cout<<" 3. Exchange Sort"<<endl; cout<<" 4. Insertion Sort"<<endl; cout<<" 5. Selection Sort"<<endl; cout<<" 6. Quick Sort"<<endl; cout<<" 7. Shell Sort"<<endl;
cout<<" 8. Tampilkan Hasil Data"<<endl; cout<<" 9. Acak"<<endl;
cout<<" 10. Exit"<<endl<<endl;
cout<<"**********************************************"<<endl; printf(" Pilihan Anda : ");scanf("%d",&pil);
switch(pil) //pemilihan sorting {
case 1:Input_Data();break; case 2:bubble_sort();break; case 3:exchange_sort();break; case 4:insertion_sort();break; case 5:selection_sort();break; case 6:QuickSort(0,n-1);
printf("\n Quick sort selesai, Silahkan Inputkan Data Anda ke Menu No.1");break;
case 7:shell_sort();break; case 8:Tampil();break; case 9:AcakLagi();break; }
getch(); }
Algoritma :
1. Mulai
2. Tampilan pilihan menu
a. Menu 1, untuk menginputkan data. Didalam menu 1 ini user akan menginputkan
batas atau banyak data yang akan diurutkan kemudian user memasukkan data
b. Menu 2, untuk mengurutkan data yang sudah diinputkan menggunakan metode
bubble sort.
c. Menu 3, untuk mengurutkan data yang sudah diinputkan menggunakan metode
exchange sort
d. Menu 4, untuk mengurutkan data yang sudah diinputkan menggunakan metode
Insertion sort
e. Menu 5, untuk mengurutkan data yang sudah diinputkan menggunakan metode
Selection sort
f. Menu 6, untuk mengurutkan data yang sudah diinputkan menggunakan metode
quick sort
g. Menu 7, untuk mengurutkan data yang sudah diinputkan menggunakan metode
shell sort
h. Menu 8, untuk menampilkan data yang telah diurutkan
i. Menu 9, untuk data secara acak
3. Pilihan Ascending(naik) atau Descending(turun)
4. Pilih menu 8 untuk menampilkan hasil urutan
5. Hasil urutan
6. Selesai
Deklarasi :
dengan batas banyak data yang telah ditetapkan. Setelah itu user memilih pilihan metode
sorting, dari menu program ini ada 6 metode sorting, antara nya adalah bubble sort, selection
sort, shell sort, quick sort, insertion sort, dan exchange sort. Setelah memilih metode sorting
user kemudian memilih menu 8 untuk melihat hasil sorting sesuai dengan pilihan metode
sorting yang dipilih.
Tugas Rumah 2
Algoritma dan Struktur Data
Nama Program
:
Program mengurutkan data dengan data yang di
masukkan secara random.
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks.
Script program :
#include <iostream> #include <iomanip> #include <conio.h> #include <time.h> #include <windows.h> #define MAX 1using namespace std;
int bubble(); int SelectionSort(); int shell(); int insertion(); int exchange();
int pilihan,hitung,i; char ulang,choose;
char nx[10]; int data[MAX]; int data1[100];
int temp; int n; int cek(char str[]) {
int i, panjang;
panjang=strlen(str); /*strlen berfungsi untuk mengetahui jumlah nilai*/
for(i=0;i<panjang;i++) {
if(!isdigit(str[i])) /*isdigit berfungsi untuk mengembalikan nilai selain nol*/
{
cout<<"Inputan Salah ! Harap Mengulangi !\n"; return 0;
} }
return 1; }
int main() {
mulai :
system ("cls"); do
{
cout<< "\t\t\t #############################\n"; cout<< "\t\t\t | Program Sorting Data |\n"; cout<< "\t\t\t #############################\n"; cout<<" "<<endl<<endl;
cout<<"\tInput Banyak Data : "; cin>>nx;
cout<<endl; }
while(!cek(nx));
n=atoi(nx); /*atoi berfungsi untuk mengubah string (teks) angka menjadi bilangan numerik integer*/
int data[100];
srand(time(NULL)); /*srand berfungsi untuk menentukan seed atau posisi awal dalam sebuah pengacakan,
sedangkan time(NULL) berfungsi untuk mengembalikan nilai yang kemudian di jadikan*/
int i;
for(i=0;i<n;i++) {
data[i]= rand()%n; /*rand berfungsi untuk mengembalikan sebuah nilai integer*/
cout<<data[i]<<" "; }
cout<<"\n\n\n"; {
data1[hitung]=data[hitung];
cout<<"\t+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+\n"; cout<<"\t PILIHAN MENU METODE SORTING \n"; cout<<"\t=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=\n"; cout<<"\t >> [1] Bubble sort\n";
cout<<"\t >> [2] Selection sort\n"; cout<<"\t >> [3] Shell sort\n";
cout<<"\t >> [4] Insertion sort\n"; cout<<"\t >> [5] Exchange sort\n"; cout<<"\t >> [6] EXIT\n";
cout<<"\t=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=\n\n\n"; cout<<" Pilihan Anda ... (1/2/3/4/5/6) ?? : "; cin>>pilihan;
cout<<"\n\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"; cout<<"Pilih Ascending or Descending [A/D] ? ";
cin>>choose; switch (pilihan) {
case 1: bubble(); break; case 2:
SelectionSort(); break;
case 3: shell(); break; case 4: insertion(); break;
case 5: exchange(); break; case 6: exit(1); default: {
cout<<"\tInputan Anda Tidak Ada\n\n"; }
repeat :
cout<<"\n\t\tUlangi Lagi [Y/N] ?? : "; cin>>ulang;
cout<<"\n\n";
if (ulang=='y'||ulang=='Y') {
goto mulai; }
else if(ulang=='n'||ulang=='N') {
system ("cls");
cout<<"\n\n\t\t\tTerima Kasih"<<endl; exit(1);
} else {
system("cls");
cout<<"Inputan Data Anda Tidak Ada ...\n\n"; getch();
goto repeat; }
} }
int 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 ((choose=='a')||(choose=='A')) {
cout<<"\n\nHasil Pengurutan : \n\n"; for(int iii=0; iii<n; iii++)
cout<<data1[iii]<<" "; }
if ((choose=='d')||(choose=='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"; }
int 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 ((choose=='a')||(choose=='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]<<" "; }
cout<<"\nMenjalankan metode Selection Sort dengan pengurutan Descending";
cout<<"\n\nHasil Pengurutan : \n\n"; for(int iii=n-1; iii>=0; iii--) cout<<data1[iii]<<" ";
}
cout<<"\n"; }
int 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); /*swap digunakan untuk menukarkan dua buah nilai*/ }
while(gap=gap/2);
if ((choose=='a')||(choose=='A')) {
cout<<"\nMenjalankan metode Shell Sort dengan pengurutan Ascending"; cout<<"\n\nHasil Pengurutan : \n\n";
for(i=0;i<n;i++) cout<<data1[i]<<" "; }
{
cout<<"\nMenjalankan metode Shell Sort dengan pengurutan Descending";
cout<<"\n\nHasil Pengurutan : \n\n"; for(i=n-1;i>=0;i--)
cout<<data1[i]<<" ";
}
cout<<endl; }
int insertion() {
cout<<"---\n"; int temp,i,j;
for(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; }
if ((choose=='a')||(choose=='A')) {
cout<<"\nMenjalankan metode Insertion Sort dengan pengurutan Ascending";
cout<<"\n\nHasil Pengurutan : \n\n"; for(int iii=0; iii<n; iii++)
cout<<data1[iii]<<" "; }
if ((choose=='d')||(choose=='D')) {
cout<<"\nMenjalankan metode Insertion Sort dengan pengurutan Descending";
cout<<"\n\nHasil Pengurutan : \n\n"; for(int iii=n-1; iii>=0; iii--) cout<<data1[iii]<<" ";
}
}
void tukar (int a, int b) {
int t ;
t = data [b] ;
data [b] = data [a] ; data [a] = t ;
}
int exchange() {
cout<<"---\n"; for (int i=0; i<n-1; i++)
{
for (int j=(i+1); j<n; j++) {
if (data [i] > data [j]) tukar (i, j) ; }
}
if ((choose=='a')||(choose=='A')) {
cout<<"\nMenjalankan metode Exchange Sort dengan pengurutan Ascending";
cout<<"\n\nHasil Pengurutan : \n\n"; for(int iii=0; iii<n; iii++)
cout<<data1[iii]<<" "; }
if ((choose=='d')||(choose=='D')) {
cout<<"\nMenjalankan metode Exchange Sort dengan pengurutan Descending";
cout<<"\n\nHasil Pengurutan : \n\n"; for(int iii=n-1; iii>=0; iii--) cout<<data1[iii]<<" ";
}
Algoritma :
1.
Mulai
2.
Memasukkan Banyak Data yang akan di masukkan,
3.
Data akan muncul secara acak
4.
Masuk ke menu pilihan metode sorting
5.
Pilih salah satu metode sorting
6.
Pilih salah satu proses Ascending or Desending
a.
Jika pilih Ascending maka data akan diurutkan dari bawah ke atas
b.
Jika pilih Descending maka data akan diurutkan dari atas ke bawah
7.
Hasil urutan data
8.
Selesai
Deklarasi :
Program diatas akan menampilkan sebuah data yang diurutkan. Data yang
Tugas Rumah 3
Algoritma dan Struktur Data
Nama Program
:
Program Mengurutkan Data
Bahasa Pemrogramam
: C++
Compiler
: Code Blocks.
Script program :
#include <stdio.h> #include <iostream> #include <conio.h> using namespace std;typedef struct {
char huruf; int angka; }Data;
Data data [20]; int main() {
int i, j;
int N;
printf("Input Data [Maksimal Data Yang Diinputkan adalah 20] : "); scanf("%i",&N);
for(i=0;i<N;i++) {
printf("Masukan Data ke - %i\n",i+1); printf("Masukan huruf : ");
scanf("%i",&data[i].angka); }
int temp;
for(j=0;j<N-1;j++) {
for(i=j+1;i<N;i++) {
if(data[j].huruf < data[i].huruf) {
temp=data[j].huruf;
data[j].huruf=data[i].huruf; data[i].huruf=temp;
temp=data[j].angka;
data[j].angka=data[i].angka; data[i].angka=temp;
} } }
printf("Data setelah diurutkan\n"); for(i=0;i<N;i++)
{
printf(" %c",data[i].huruf); printf(" %i\n",data[i].angka); }
return 0; }
Algoritma :
1. Mulai
2. Input data, maksimal inputan data sebanyak 20, inputan ini menggunakan fungsi array.
3. Memasukkan data sebanyak batas input data yang dimasukkan sebelum nya.
4. Hasil pengurutan data sesuai abjad dari atas kebawah menggunakan Descending.
5. Selesai
Deklarasi :
KESIMPULAN
1. Prinsip dasar Insertion adalah secara berulang-ulang menyisipkan / memasukan setiap
elemen kedalam posisinya / tempatnya yg benar.
2. Qick sort banyak digunakan utk proses sorting,karena:
merupakan proses sorting yang umum digunakan.
mudah untuk diimplementasikan.
Prosesnya sangat cepat.
3. Untuk pemrograman konvensional maka pemeriksaan-pemeriksaan pasangan tersebut
harus dilakukan satu demi satu, misalnya oleh bubble-sort dilakukan dari kanan ke kiri
serta di dalam sejumlah iterasi.
4. Selection Sort , mencari elemen yang tepat untuk diletakkan di posisi yang telah
diketahui, dan meletakkannya di posisi tersebut setelah data tersebut ditemukan.
DAFTAR RUJUKAN
1.
Tim Asisten Dosen. 2014.
Modul 2 Sorting (Pengurutan)
. Malang: Unversitas Negeri
Malang.