Anda di halaman 1dari 12

LAPORAN AWAL

STRUKTUR DATA
LAPORAN KE-9

Disusun oleh :
Nama : Hendrik Purnama Yuniar
Nim : 191011401792
Kelas : 04Tple025 Reg-C sabtu

TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS PAMULANG

Jl. Surya Kencana No. 1 Pamulang Telp (021)7412566, Fax. (021)7412566


Tangerang Selatan-Banten
PERTEMUAN IX
SORTING
(Lanjut 2)

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 Cetak Sebelum diurutkan


cout<<"\nData sebelum diurut : ";
for(i=0; i<N; i++)
cout<<setw(4)<<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 Cetak Sebelum diurutkan


cout<<"\nData sebelum diurut : ";
for(i=0; i<N; i++)
cout<<setw(4)<<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 Cetak sebelum diurutkan


cout<<"\nData sebelum diurut : ";
for(i=0; i<N; i++)
cout<<setw(3)<<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];
}

//Proses Cetak Setelah diurutkan


cout<<"\nData Setelah di urut : ";
for(i=0; i<N; i++)
cout<<setw(3)<<Nilai[i];
getch();
}

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 Cetak Sebelum diurutkan


cout<<"\nData sebelum diurut : ";
for(i=0; i<N; i++)
cout<<setw(3)<<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];
}

//Proses Cetak Setelah diurutkan


cout<<"\nData Setelah di urut : ";
for(i=0; i<N; i++)
cout<<setw(3)<<Nilai[i];
getch();
}
Outputnya:

e. Buatlah program menu untuk menampilkan 4 program di atas, menggunakan


perintah switch (simpan dengan nama lat9_5.cpp)
Programnya:
#include<iostream.>
#include<conio.h>
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<<endl;
int pilih;
cout<<" Geometris Penghitung Luas Bidang :"<<endl;
cout<<endl;
cout<<" 1. Bangun Segitiga "<<endl;
cout<<" 2. Bangun Lingkaran "<<endl;
cout<<" 3. Bangun Persegi Empat "<<endl;
cout<<" 4. Updating………… "<<endl;
cout<<endl;
cout<<"================================================="<<endl;
cout<<endl<<endl;
cout<<" >> Silahkan Pilih : ";
cin>>pilih;
cout<<endl;
switch (pilih){

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.

3. Jelaskan tahapan-tahapan Sorting menggunakan metode Shell Sort!


Jawab:
Tahapan-tahapan sorting menggunakan metode shell sort.:
 Pertama-tama adalah menentukan jarak mula-mula dari data yang akan dibandingkan, yaitu
N/2. Data pertama dibandingkan dengan data dengan jarak N/2. Apabila data pertama lebih
besar dari data ke N/2 tersebut makna kedua data tersebut ditukar. Kemudian data kedua
dibandingkan dengan jarak yang sama yaitu N/2. Demikian seterusnya sampai seluruh data
dibandingkan sehinga semua data ke-j selalu lebih kecil daripada data ke-(j+N/2).
 Pada proses berikutnya, digunakan jarak (N/2)/2 atau N/4. Data pertama dibandingkan
dengan data dengan jarak N/4. Apabila data pertama lebih besar dari data ke N/4 tersebut
maka kedua data tersebut ditukar. Kemudian data kedua dibandingkan dengan jarak yang
sama yaitu N/4. Demikianlah seterusnya hingga seluruh data dibandingkan sehingga semua
data ke-j lebih kecil daripada data ke-(j+N/4).
 Pada proses berikutnya, digunakan jarak (N/4)/2 atau N/8, demikian seterusnya sampai
jarak yang digunakan adalah 1.

4. Jelaskan tahapan-tahapan Sorting menggunakan metode Insertion Sort!


Jawab:
Tahapan-tahapan sorting menggunakan metode insertion sort:
 Dalam pengurutan datanya. Jika data sudah ada, maka pengurutan dimulai dengan
mengambil satu data dan membandingkannya dengan data-data yang ada didepannya. Jika
data yang diambil memenuhi syarat perbandingan, maka data yang diambil tersebut akan
diletakkan didepan data yang dibandingkan, kemudian data-data yang dibandingkan akan
bergeser mundur.
 Catatan: Dalam hal pengurutan data dengan metode insertion sort ini, data yang diambil
akan dibandingkan dengan data-data yang ada disebelah kiri/data sebelumnya (data-data
sebelum data yang diambil). Jika proses tersebut selesai, maka akan dilanjutkan dengan
data-data selanjutnya (data ke-3, data ke-4,... dan seterusnya). Proses akan berlangsung
sampai data-data terurutkan dengan benar.

Terima kasih
************************

Anda mungkin juga menyukai