STRUKTUR DATA
LAPORAN KE-9
Disusun oleh :
Nama : Hendrik Purnama Yuniar
Nim : 191011401792
Kelas : 04Tple025 Reg-C sabtu
TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS PAMULANG
RANGKUMAN
1. TEORI DASAR
a) Metode Shell Sort
Metode ini mirip dengan Bubble Sort, hanya saja perbandingan dilakukan bukan antara
dua bilangan yang berurutan, akan tetapi antara dua bilangan dengan jarak tertentu. Jarak
ditentukan dengan N Div 2, dimana N adalah banyaknya elemen array. Lakukan
pertukaran tempat jika setiap kali perbandingan dipenuhi (lebih besar untuk urut
menaik dan lebih kecil untuk urnt menurun). Setiap kali perbandingan terhadap
keseluruhan elemen selesai dilakukan, maka perbandingan yang barn dilakukan kembali
dimana jarak diperoleh dengan jarak Div 2 (Jarak diperoleh dari Nilai jarak
sebelumnya). Perbandingan keseluruhan dilakukan sampai Nilai jarak sama dengan
1(satu). Pada saat jarak bernilai 1, maka metode Shell Sort sama dengan metode Bubble
Sort.
b) Metode Insertion Sort
Metode ini merupakan metode pengurutan dengan cara menyisipkan elemen array pada
posisi yang tepat. Pencarian yang tepat dilakukan dengan melakukan pencarian
beruntun di dalam array. Selama pencarian posisi yang tepat dilakukan pergeseran
elemen array. Algoritma pengurutan ini tepat untuk persoalan menyisipkan elemen
baru ke dalam array yang sudah terurut.
2. TUGAS PRAKTIKUM
a. Buatlah program untuk Pengurutan dengan Metode Shell Sort "Pengurutan secara
menaik" (simpan dengan nama lat9_1.cpp)
Programnya:
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;
main()
{
int Nilai[20];
int i, k, N, l;
int temp, jarak, s;
cout<<"Masukkan Banyak Bilangan:";
cin>>N;
for(i=0; i<N; i++)
{
cout<<"Elemen ke-"<<i<<" : ";
cin>>Nilai[i];
}
//Proses Pengurutan
jarak = N/2;
cout<<"\nJarak ="<<jarak;
while(jarak >=1)
{
do
{
s=0;
for(i=0; i<=(N-jarak)-1; i++)
{
k=i+jarak;
if(Nilai[i]>Nilai[k])
{
temp = Nilai[i];
Nilai[i] = Nilai[k];
Nilai[k] = temp;
s=1;
for(l=0; l<N; l++)
cout<<setw(4)<<Nilai[l];
cout<<"\n\t";
getch();
}
}
}
while(s!=0);
jarak /= 2;
cout<<"\nJarak= "<<jarak;
}
cout<<"\nData Setelah di urut : ";
for(i=0; i<N; i++)
cout<<setw(4)<<Nilai[i];
getch();
}
Outputnya:
b. Buatlah program untuk Pengurutan dengan Metode Shell Sort "Pengurutan secara
menurun" (simpan dengan nama lat9_2.cpp)
Programnya:
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;
main()
{
int Nilai[20];
int i, k, N, l;
int temp, jarak, s;
cout<<"Masukkan Banyak Bilangan : ";
cin>>N;
for(i=0; i<N; i++)
{
cout<<"Elemen ke-"<<i<<" : ";
cin>>Nilai[i];
}
//Proses Pengurutan
jarak = N/2;
cout<<"\nJarak = "<<jarak;
while(jarak >=1)
{
do
{
s=0;
for(i=0; i<=(N-jarak)-1; i++)
{
k=i+jarak;
if(Nilai[i]<Nilai[k])
{
temp = Nilai[i];
Nilai[i] = Nilai[k];
Nilai[k] = temp;
s=1;
for(l=0; l<N; l++)
cout<<setw(4)<<Nilai[l];
cout<<"\n\t";
getch();
}
}
}
while(s!=0);
jarak /= 2;
cout<<"\nJarak= "<<jarak;
}
cout<<"\nData Setelah di urut : ";
for(i=0; i<N; i++)
cout<<setw(4)<<Nilai[i];
getch();
}
Outputnya:
c. Buatlah program untuk Pengurutan dengan Metode Insertion Sort "Pengurutan
Secara menaik" (simpan dengan nama lat9_3.cpp)
Programnya:
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;
main()
{
cout<<endl;
cout<<" Nama : Hendrik Purnama Yuniar "<<endl;
cout<<" NIM : 191011401792"<<endl;
cout<<" Kelas : 04TPLE025"<<endl;
cout<<" Mata Kuliah : Praktikum Struktur Data "<<endl<<endl;
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++"
<<endl<<endl;
cout<<" Metode Insertion Sort Pengurutan Secara Menaik" <<endl<<endl;
cout<<"++++++++++++++++++++++++++++++++++++++++++++++++"
<<endl<<endl;
int Nilai[20];
int i, j, k, N;
int temp;
cout<<"Masukkan Banyak Bilangan : ";
cin>>N;
for(i=0; i<N; i++)
{
cout<<"Elemen ke-"<<i<<" : ";
cin>>Nilai[i];
}
//Proses Pengurutan
for(i=1; i<N; i++)
{
temp = Nilai[i];
j=i-1;
while((temp<=Nilai[j])&&(j>=1))
{
Nilai[j+1] = Nilai[j];
j--;
}
if(temp >= Nilai[j])
Nilai[j+1] = temp;
else
{
Nilai[j+1] = Nilai[j];
Nilai[j] = temp;
}
cout<<endl;
for(k=0; k<N; k++)
cout<<setw(3)<<Nilai[k];
}
Outputnya:
d. Buatlah program untuk Pengurutan dengan Metode Insertion Sort
"Pengurutan Secara menurun" (simpan dengan nama lat9_4.cpp)
Programnya:
#include<iostream>
#include<conio.h>
#include<iomanip>
using namespace std;
main()
{
cout<<endl;
cout<<" Nama : Hendrik Purnama Yuniar "<<endl;
cout<<" NIM : 191011401792"<<endl;
cout<<" Kelas : 04TPLE025"<<endl;
cout<<" Mata Kuliah : Praktikum Struktur Data "<<endl<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++"
<<endl<<endl;
cout<<" Metode Insertion Sort Pengurutan Secara Menurun" <<endl<<endl;
cout<<"+++++++++++++++++++++++++++++++++++++++++++++++++"
<<endl<<endl;
int Nilai[20];
int i, j, k, N;
int temp;
//bool ketemu;
cout<<"Masukkan Banyak Bilangan : ";
cin>>N;
for(i=0; i<N; i++)
{
cout<<"Elemen ke-"<<i<<" : ";
cin>>Nilai[i];
}
//Proses Pengurutan
for(i=1; i<N; i++)
{
temp = Nilai[i];
j=i-1;
while((temp > Nilai[j])&&(j>=1))
{
Nilai[j+1] = Nilai[j];
j--;
}
if(temp <= Nilai[j])
Nilai[j+1] = temp;
else
{
Nilai[j+1] = Nilai[j];
Nilai[j] = temp;
}
cout<<endl;
for(k=0; k<N; k++)
cout<<setw(3)<<Nilai[k];
}
case 1 :
cout<<" !Rumus Luas Segitiga Adalah 1/2 x Alas x Tinggi "<<endl<<endl;
double A,T,Rumus;
cout<<" Input Alasnya = ";
cin>>A;
cout<<" Input Tingginya = ";
cin>>T;
Rumus = A*T/2;
cout<<endl;
cout<<" Maka Hasilnya = "<<Rumus<<" Cm Persegi "<<endl;
break;
case 2 :
cout<<" !Rumus Luas Lingkaran Adalah (V= 22/7 ) x Jari-Jari x Jari-Jari "<<endl<<endl;
double R;
cout<<" Input Jari-Jarinya = ";
cin>>R;
cout<<endl;
cout<<" Maka Hasilnya = "<<R*R*22/7<<" Cm Persegi "<<endl;
break;
case 3 :
cout<<" !Rumus Luas Persegi Empat Adalah Sisi x Sisi "<<endl<<endl;
double S;
cout<<" Input Sisinya = ";
cin>>S;
cout<<endl;
cout<<" Maka Hasilnya = "<<S*S<<" Cm Persegi "<<endl;
break;
case 4 :
cout<<" Page Not Found [EMPTY] "<<endl;
break;
default:
cout<<" [ Pilihan Diluar Jangkauan ] "<<endl;
}getch () ;
}
Outpunya:
3. TUGAS PENDAHULUAN
1. Jelaskan kekurangan menggunakan metode Shell Sort dan Insertion Sort dengan metode-
metode Sorting lainnya!
Jawab:
a. Kekurangan metode shell sort yaitu:
Membutuhkan method tambahan.
Sulit untuk membagi masalah.
b. Kekurangan metode insertion sort yaitu:
Banyaknya operasi yang diperlukan dalam mencari posisi yang tepat untuk elemen larik.
Untuk larik yang jumlahnya besar ini tidak praktis.
Jika list terurut terbalik sehingga setiap eksekusi dari perintah harus memindai dan
mengganti seluruh bagian sebelum menyisipkan elemen berikutnya.
Membutuhkan waktu 0(n2) pada data yang tidak terurut, sehingga tidak cocok dalam
pengurutan elemen dalam jumlah besar.
2. Jelaskan perbedaan program Sorting dengan menggunakan antara metode Shell Sort dan
Insertion Sort!
Jawab:
a) Shell sort: metode pengurutan yang hampir sama dengan insertion sort, dimana pada setiap
nilai i dalam n/i item diurutkan. Pada setiap pergantian nilai, i dikurangi sampai 1 sebagai
nilai terakhir.
b) insertion sort: salah satu metode sorting dengan cara menyisipkan/insert. Pada dasarnya
insertion sort memilih data yang akan diurutkan menjadi dua bagian, yang belum diurutkan
dan yang sudah diurutkan.
Terima kasih
************************