Kelompok A4 :
432007005200105 Agung Gunawan
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.
Demikian yang dapat penulis sampaikan. Akhir kata, semoga makalah ini
dapat bermanfaat.
Penulis
ii
DAFTAR ISI
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.
4
cepat dibandingkan algoritma pengurutan penyisipan (insertion
sort).
5
B. IMPLEMENTASI PROGRAM
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
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
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
9
2. Listing program shell sort
#include<iostream>
#include<conio.h>
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;
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 << " Pengulangan Shell Sort " << i << " : ";
for (a = 0; a < array; a++) {
cout << "\t" << "[" << arr_sorting[a] << "]";
}
}
//hasil pengurutan
cout << " Data yang telah diurutkan dengan algoritma Shell Sort :" << endl;
getch();
}
11
3. Layar Tampilan
3.1 Layar tampilan awal program shell sort
12
3.5 Hasil data yang diurutkan
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
{ Blok pembuka
} Blok penutup
// Komentar
14
Fungsi keluaran yang digunakan
cout untuk menampilkan data ataupun
tulisan
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
15
Merupakan perulangan yang
termasuk dalam couted loop, karena
for
sudah jelas berapa kali ia akan
mengulang
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;
}
}
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
18
for (i = 0; i < array; i++) {
cout << "\t" << "[" << arr_sorting[i] << "]"; Menampilkan hasil pengurutan
}
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
end for
/* menghitung interval */
interval = (interval -1) /3;
end while
end procedure
21
DAFTAR PUSTAKA
22