Anda di halaman 1dari 22

MAKALAH

Struktur Data dan Algoritma – Shell Sort


Disusun untuk memenuhi salah satu tugas mata kuliah struktur data

Kelompok A4 :
432007005200105 Agung Gunawan

TEKNIK INFORMATIKA (S1)


SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
STMIK TASIKMALAYA
2021
KATA PENGANTAR

Puji syukur kehadiran Tuhan Yang Maha Esa, tanpa rahmat dan
pertolongan-Nya, penulis tidak akan mampu menyelesaikan makalah ini dengan
baik. Tidak lupa shalawat serta salam tercurahkan kepada Nabi Muhammad SAW
yang syafa’atnya kita nantikan kelak.

Makalah “Struktur Data dan Algoritma – Shell Sort” ini disusun guna
memenuhi tugas mata kuliah Struktur data. Selain itu, Penulis berharap makalah ini
berguna khususnya bagi saya, umumnya ke semua mahasiswa teknik informatika.

Penulis menyadari makalah ini perlu banyak penyempurnaan karena


kesalahan dan kekurangan. Penulis terbuka terhadap kritik dan saran pembaca agar
makalah ini dapat lebih baik. Apabila terdapat banyak kesalahan pada makalah ini,
baik terkait penulisan maupun konten, penulis memohon maaf.

Demikian yang dapat penulis sampaikan. Akhir kata, semoga makalah ini
dapat bermanfaat.

Ciamis, 4 Juli 2021

Penulis

ii
DAFTAR ISI

KATA PENGANTAR ............................................................................... ii


DAFTAR ISI ....................................................................................................... iii
A. DASAR TEORI
1. Memahami sorting ............................................................................... 4
2. Memahami shell sort ................................................................... 4
3. Algoritma shell sort ............................................................................... 5
B. IMPLEMENTASI PROGRAM
1. Algoritma proses sorting shell sort ....................................................... 6
2. Listing program shell sort ................................................................... 10
3. Layar Tampilan ............................................................................... 12
4. Penjelasan dari setiap listing program ........................................... 13
C. KESIMPULAN
1. Iplementasi dalam pseudo-code ....................................................... 20
2. Kelebihan dan kelemahan shell sort ........................................... 20
DAFTAR PUSTAKA ............................................................................... 22

iii
A. DASAR TEORI

1. Memahami sorting
Pengurutan data dalam struktur data sangat penting terutama
untuk data yang bertipe numerik dan karakter. Pengurutan dapat
dilakukan secara ascending (urut naik) dan descending (urut turun).
Pengurutan (Sorting) adalah proses pengurutan data yang
sebelumnya disusun secara acak sehingga tersusun secara teratur
menurut aturan tertentu.
Pengurutan data ada beberapa macam, diantaranya Bubble
sort, Recursive bubble sort, Selection sort, Insertion sort, Recursive
insertion sort, Merge sort, Iterative merge sort, Quick sort, Iterative
quick sort, Shell sort, Radix sort, Bucket sort, Heap sort, Counting
sort, Tim sort, Comb sort, Pigeonhole sort, Cycle sort, Cocktail sort,
Strand sort, Bitonic sort, Pancake sorting, Bogo sort, Sleep sort,
Structure sorting, Gnome sort, Tree sort, Tag sort, Stooge sort,
Cartesian tree sorting, dan sebagainya.

2. Memahami shell sort


Shell sort atau pertambahan menurun (diminishing
increment sort) ditemukan oleh Donald L. Shell pada tahun 1959.
Shell sort adalah versi umum dari algoritma insertion sort.
Sortir shell adalah algoritma yang pertama-tama
mengurutkan elemen jauh satu sama lain dan secara berturut-turut
mengurangi interval antara elemen yang akan diurutkan. Nilai yang
lebih kecil harus dipindahkan ke paling kiri (ascending) dengan cara
membandingkan suatu data dengan data lain yang memiliki jarak
tertentu, sehingga membentuk sebuah sub-list, kemudian dilakukan
penukaran bila diperlukan.
Algoritma Shell sort lima kali lebih cepat dibandingkan
algoritma pengurutan gelembung (bubble sort) dan dua kali lebih

4
cepat dibandingkan algoritma pengurutan penyisipan (insertion
sort).

3. Algoritma shell sort


Penjelasan algoritma shell sort
1) Program akan dijalankan jika range indeks > 0 terpenuhi.
2) Tentukan jarak data yang akan dibandingkan dengan banyak
data (n) dibagi 2, jika ganjil maka hilangkan 0.5 nya. Misal,
banyak data adalah 5 maka jaraknya 5 / 2 = 2.5 = 2.
3) Misal data dikiri adalah x dan data di kanan adalah y maka, jika
x > y == false maka data tidak ditukar (no swap) dan jika x > y
== true maka data ditukar (swapping).
4) Pengurutan akan berhenti apabila jarak < 1.

5
B. IMPLEMENTASI PROGRAM

1. Algoritma proses sorting shell sort


1) Data awal yang di acak dengan banyak data (n) adalah 9. range indeks
> 0 terpenuhi.
4 3 20 70 6 10 5 56 34

2) menentukan jarak data yang akan dibandingkan yaitu dengan cara,


banyak data (n) dibagi 2, (9/2 = 4.5) dibulatkan menjadi 4. Jadi, jarak
perbandingan datanya adalah n = 4.

PASS KE – 1

4 > 6 == false

4 3 20 70 6 10 5 56 34

3 > 10 == false

4 3 20 70 6 10 5 56 34

20 > 5 == true

4 3 20 70 6 10 5 56 34

70 > 56 == true

4 3 5 70 6 10 20 56 34

6 > 34 == false

4 3 5 56 6 10 20 70 34

4 3 5 56 6 10 20 70 34

3) Pada langkah kedua digunakan jarak n / 2 yaitu (4 / 2) = 2. Jadi, jarak


perbandingan datanya adalah n = 2.

6
PASS KE – 2

4 > 5 == false

4 3 5 56 6 10 20 70 34

3 > 56 == false

4 3 5 56 6 10 20 70 34

5 > 6 == false

4 3 5 56 6 10 20 70 34

56 > 10 == true

4 3 5 56 6 10 20 70 34

4 3 5 10 6 56 20 70 34
3 > 10 == false

6 > 20 == false

4 3 5 10 6 56 20 70 34

56 > 70 == false

4 3 5 10 6 56 20 70 34

20 > 34 == false

4 3 5 10 6 56 20 70 34

4 3 5 10 6 56 20 70 34

4) Pada langkah ketiga digunakan jarak n / 2 yaitu (2 / 2) = 1. Jadi, jarak


perbandingan datanya adalah 1.

7
PASS KE – 3

4 > 3 == true

4 3 5 10 6 56 20 70 34

4 > 5 == false

3 4 5 10 6 56 20 70 34

5 > 10 == false

3 4 5 10 6 56 20 70 34

10 > 6 == true

3 4 5 10 6 56 20 70 34

3 4 5 6 10 56 20 70 34
5 > 6 == false

10 > 56 == false

3 4 5 6 10 56 20 70 34

56 > 20 == true

3 4 5 6 10 56 20 70 34

3 4 5 6 10 20 56 70 34
10 > 20 == false

56 > 70 == false

3 4 5 6 10 20 56 70 34

70 > 34 == true

3 4 5 6 10 20 56 70 34

8
3 4 5 6 10 20 56 34 70
56 > 34 == true

3 4 5 6 10 20 34 56 70
20 > 34 == false

3 4 5 6 10 20 34 56 70

5) jarak n / 2 yaitu (1 / 2) = 0.5, pengurutan berhenti karena jarak < 1

9
2. Listing program shell sort

#include<iostream>
#include<conio.h>

using namespace std;

int main() {

//deklarasi array
int array;

//header
cout << endl;
cout << " ************************************" << endl;
cout << " ** PENERAPAN ALGORITMA SHELL SORT **" << endl;
cout << " ** A4 **" << endl;
cout << " ** Agung Gunawan **" << endl;
cout << " ** 432007006200105 **" << endl;
cout << " ************************************" << endl;
cout << endl;

//input panjang array


cout << " ==> Masukkan panjang array: ";cin>>array;
int arr_sorting[array], a, k,j, i, t;

cout << endl;

//input data array


cout << " Masukkan " << array << " Data yang akan diurutkan : " << endl;
for (i = 0; i < array; i++)
{
cout<<" Data ke- "<<i+1<<": ";
cin >> arr_sorting[i];
}

cout << endl;

//data yang akan diurutkan


cout << " Data anda :" << endl;

cout << endl;

for (i = 0; i < array; i++) {


cout << "\t" << "[" << arr_sorting[i] << "]";
}

cout << endl;

10
//proses pengurutan
for (i = array / 2; i > 0; i = i / 2) {
for (j = i; j < array; j++) {
for (k = j - i; k >= 0; k = k - i) {
if (arr_sorting[k + i] >= arr_sorting[k])
break;
else {

t = arr_sorting[k];
arr_sorting[k] = arr_sorting[k + i];
arr_sorting[k + i] = t;
}
}

cout << endl;

cout << " Pengulangan Shell Sort " << i << " : ";
for (a = 0; a < array; a++) {
cout << "\t" << "[" << arr_sorting[a] << "]";
}
}

cout << "\n" << endl;

//hasil pengurutan
cout << " Data yang telah diurutkan dengan algoritma Shell Sort :" << endl;

cout << endl;

for (i = 0; i < array; i++) {


cout << "\t" << "[" << arr_sorting[i] << "]";
}

getch();
}

11
3. Layar Tampilan
3.1 Layar tampilan awal program shell sort

3.2 Inputan data

3.3 Data yang akan diurutkan

3.4 Proses data yang diurutkan

12
3.5 Hasil data yang diurutkan

4. Penjelasan dari setiap listing program


#include <iostream>
#include <conio.h>
Deklarasi include
Deklarasi namespace
using namespace std; Deklarasi fungsi

int main()
Sebuah prosesor pengarah yang
mengatakan kepada kompiler untuk
#include
meletakan kode dari header file
kedalam program
Digunakan untuk menampilkan
<iostream>
perintah : cin, cout, endl, ends
Digunakan untuk menampilkan
perintah : getch, clrscr, getche, putch,
<conio.h>
clreol, gotoxy, wherex, wherey,
window
Digunakan untuk mendeklarasikan/
memberitahukan kepada compiler
using namespace std bahwa kita akan menggunakan
semua fungsi/class/file yang terdapat
dalam namespace std
Terminator pernyataan, artinya
setiap pernyataan harus diakhiri
;
dengan titik koma, ini menunjukkan
akhir dari sebuah entitas logis
Merupakan fungsi (function) utama,
Int main ()
fungsi yang akan dibaca oleh

13
kompilator pertama kali secara
otomatis
Dalam fungsi utama adalah sebuah
int
return type integer

main Identifier (identitas)

Tempat dimana kita dapat mengisi


parameter untuk function, tetapi
() dalam fungsi utama, hal itu tidak
dibutuhkan dan dibiarkan dalam
keadaan kosong

{ Blok pembuka

} Blok penutup

Menyatakan bahwa kode yang diapit


oleh mereka adalah satu ruang
lingkup (scope) dan menyatakan
{}
bahwa semua kode di dalam blok
tersebut merupakan definsi dari
fungsi utama

//deklarasi array Komentar deklarasi array

// Komentar

Mendeklarasikan variabel array


int array
dengan tipe integer
//header
cout << endl;
cout << " ************************************" << endl;
cout << " ** PENERAPAN ALGORITMA SHELL SORT **" << endl;
Header program menampilkan judul,
cout << " ** A4 **" << endl;
cout << " ** Agung Gunawan **" << endl; kelompok, nama dan npm
cout << " ** 432007006200105 **" << endl;
cout << " ************************************" << endl;
cout << endl;

//header Komentar header

cout << endl Membuata baris baru

14
Fungsi keluaran yang digunakan
cout untuk menampilkan data ataupun
tulisan

<< Bentuk yang mengiringi cout

Digunakan untuk pindah baris atau


endl
enter
cout << " ==> Masukkan panjang array: ";cin
>> array; Menginput panjang array
int arr_sorting[array], a, k,j, i, t;

Cin >> array Menginput data ke variabel array

Fungsi masukan yang digunakan


Cin untuk memasukkan data ke suatu
variabel

>> Bentuk yang mengiringi cin

Mendeklarasikan variabel a, k, j, i, t,
int arr_sorting[array], a, k, j, i, t
arr_sorting, dengan tipe integer
Kurung siku [ ] digunakan untuk
[]
menandai array
Subcript adalah berupa bilangan di
array dalam kurung siku [ ], melalui
subcript elemen array dapat diakses
cout << " Masukkan " << array << " Data yang
akan diurutkan : " << endl;
for (i = 0; i < array; i++)
Memasukkan nilai dari arr_sorting
{
atau data data yang ingin diurutkan
cout<<" Data ke- "<<i+1<<": ";
cin >> arr_sorting[i];
}
cout << " Masukkan " << array << " Data yang Memasukkan nilai ke variabel array
akan diurutkan : " << endl dengan inputan keyboard

for (i = 0; i < array; i++) Pengulangan for

15
Merupakan perulangan yang
termasuk dalam couted loop, karena
for
sudah jelas berapa kali ia akan
mengulang

i=0 Pengulangan dimulai dari indeks 0

Selama i kurang dari array, maka


i < array
akan melanjutkan perulangan
Setelah setiap loop, maka menambah
i++
i dengan 1 (yaitu i = i + 1)
Menampilkan “data ke – “ dengan
cout<<" Data ke- "<<i+1<<": "
nomor dimulai dari 1
Memasukkan nilai ke variabel
cin >> arr_sorting[i]
arr_sorting pada indeks dari i
cout << " Data anda :" << endl;

cout << endl;


Menampilkan data yang akan
diurutkan
for (i = 0; i < array; i++) {
cout << "\t" << "[" << arr_sorting[i] << "]";
}
Menampilkan nilai variabel
cout << "\t" << "[" << arr_sorting[i] << "]"
arr_sorting pada indeks dari i

for (i = array / 2; i > 0; i = i / 2) Pengulangan for

i = array / 2 Nilai awal i adalah array dibagi 2

i>0 Pengulangan dilakukan lebih dari 0

Penambahan nilai setiap


i=i/2 pengulangan dengan i yang baru
adalah i yang lama dibagi 2

for (i = array / 2; i > 0; i = i / 2) {


Proses pengurutan
for (j = i; j < array; j++) {

16
for (k = j - i; k >= 0; k = k - i) {
if (arr_sorting[k + i] >= arr_sorting[k])
break;
else {

t = arr_sorting[k];
arr_sorting[k] = arr_sorting[k + i];
arr_sorting[k + i] = t;
}
}

cout << endl; //enter

cout << " Pengulangan Shell Sort " << i


<< " : ";
for (a = 0; a < array; a++) {
cout << "\t" << "[" << arr_sorting[a]
<< "]";
}
}

for (j = i; j < array; j++) Pengulangan for

j=i Nilai awal j adalah i

Pengulangan dilakukan selama j


j < array
kurang dari array
Setelah setiap loop, maka menambah
j++
j dengan 1 (yaitu j = j + 1)

for (k = j - i; k >= 0; k = k - i) Pengulangan for

k=j-i Nilai awal k adalah j dikurangi i

Pengulangan dilakukan lebih dari


k >= 0
sama dengan 0

17
Penambahan nilai setiap
k=k-i pengulangan dengan k yang baru
adalah k yang lama dikurangi i
if (arr_sorting[k + i] >= arr_sorting[k]) Percabangan if jika syarat terpenuhi
break maka perulangan berhenti
Jika indeks arr_sorting dengan nilai
indeks [variabel k ditambah dengan
arr_sorting[k + i] >= arr_sorting[k]
nilai variabel i] lebih dari sama
dengan nilai arr_sorting indeks k
Perintah khusus yang dipakai untuk
break memaksa sebuah perulangan
berhenti sebelum waktunya

else Bagian dari percabangan if else

Nilai variabel t adalah variabel


t = arr_sorting[k];
arr_sorting indeks ke k
Nilai variabel arr_sorting indeks ke k
yang baru sama dengan Nilai
arr_sorting[k] = arr_sorting[k + i];
variabel arr_sorting indeks ke [k
ditambah i]
Nilai variabel arr_sorting indeks ke
arr_sorting[k + i] = t;
[k ditambah i] adalah t
Menampilkan pengulangan kesekian
cout << " Pengulangan Shell Sort " << i << " : ";
dengan pembaginya
for (a = 0; a < array; a++) {
cout << "\t" << "[" << arr_sorting[a]
Menampilkan proses pengurutan
<< "]";
}

a=0 Pengulangan dimulai dari 0

Pengulangan terjadi selama nilai a


a < array
kurang dari nilai array
Setelah setiap loop, maka menambah
a++
a dengan 1 (yaitu a = a + 1)

18
for (i = 0; i < array; i++) {
cout << "\t" << "[" << arr_sorting[i] << "]"; Menampilkan hasil pengurutan
}

i=0 Pengulangan dimulai dari 0

Pengulangan terjadi selama nilai i


i < array
kurang dari nilai array
Setelah setiap loop, maka menambah
i++
i dengan 1 (yaitu i = i + 1)

getch() Berfungsi untuk menahan tampilan

19
C. KESIMPULAN
1. Iplementasi dalam pseudo-code

procedure shellSort()
A : array of items

/ * menghitung interval * /
while interval < A.length /3 do:
interval = interval * 3 + 1
end while

while interval > 0 do:

for outer = interval; outer < A.length; outer ++ do:

/ * pilih nilai yang akan dimasukkan * /


valueToInsert = A[outer]
inner = outer;

/* Geser elemen ke kanan*/


while inner > interval -1 && A[inner - interval] >= valueToInsert do:
A[inner] = A[inner - interval]
inner = inner - interval
end while

/*masukkan nomor pada posisi lubang */


A[inner] = valueToInsert

end for

/* menghitung interval */
interval = (interval -1) /3;

end while

end procedure

2. Kelebihan dan kelemahan shell sort


a) Kelebihan :
1) Algoritma ini sangat rapat dan mudah untuk diimplementasikan.
2) Operasi pertukarannya hanya dilakukan sekali saja.
3) Waktu pengurutan dapat lebih ditekan.
4) Mudah menggabungkannya kembali.
5) Kompleksitas selection sort relatif lebih kecil.
b) Kekurangan :
20
1) Membutuhkan method tambahan.
2) Sulit untuk membagi masalah.

21
DAFTAR PUSTAKA

Sixv.com. 2021. Algoritma - Shell Sort | Sixv.com. [online] Diambil dari:


<https://www.sixv.com/algoritma/algoritma-shell-sort/> [diakses pada 28 Juni 2021].
Programiz.com. 2021. Shell Sort (With Code). [online] Diambil dari:
<https://www.programiz.com/dsa/shell-sort> [Diakses pada 30 Juli 2021].
Kurnia, E., 2021. LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA
Pengurutan Data dengan Shell Sort. [online] Academia.edu. Diambil dari:
<https://www.academia.edu/11359337/LAPORAN_PRAKTIKUM_ALGORITMA_
DAN_STRUKTUR_DATA_Pengurutan_Data_dengan_Shell_Sort> [Diakses pada 28
Juni 2021].
Slideplayer.info. 2021. SORTING (PENGURUTAN) Sorting adalah proses mengatur
sekumpulan objek menurut aturan atau susunan tertentu. Urutan objek tersebut dapat
menaik (ascending. - ppt download. [online] Diambil dari:
<https://slideplayer.info/slide/2721670/> [Diakses pada 28 Juni 2021].
Id.edu-base.org. 2021. Sortir Kerang. [online] Diambil dari: <https://id.edu-base.org/7779694-
shell-sort-algorithm> [Diakses pada 28 Juni 2021].
GeeksforGeeks. 2021. Sorting Algorithms - GeeksforGeeks. [online] Diambil dari:
<https://www.geeksforgeeks.org/sorting-algorithms/> [Diakses pada 28 Juni 2021].
GeeksforGeeks. 2021. ShellSort - GeeksforGeeks. [online] Diambil dari:
<https://www.geeksforgeeks.org/shellsort/> [Diakses pada 28 Juni 2021].
Forum Komputer. 2021. Belajar Pemrograman Materi Sorting pada C++ (Shell Sort, Radix
Sort, Merge Sort, Quick Sort). [online] Diambil dari:
<https://www.forumkomputer.com/2019/05/belajar-program-sorting.html> [Diakses
pada 28 Juni 2021].
Hardifal.com. 2021. Contoh Program Algoritma Pengurutan Shell Sort C++ Sederhana.
[online] Diambil dari: <https://www.hardifal.com/2018/10/sorting-materi-algoritma-
metode-shell.html> [Diakses pada 30 Juni 2021].
Posts, V., 2021. SORTING. [online] Analisis Algoritma-4. Diambil dari:
<https://tugasanalgo4blog.wordpress.com/2016/10/07/sorting/> [Diakses pada 30 Juli
2021].

22

Anda mungkin juga menyukai