Disusun Oleh:
Liska yuni br. Lumban gaol (5223351034)
Ptik Kelas C
Puji syukur penulis panjatkan kepada Tuhan yang Maha Esa atas segala karunia-Nya,
karena berkat rahmat dan anugrah-Nyalah makalah ini dapat deselesaikan tepat pada waktunya.
Adapun tujuan penulisan makalah struktur data ini adalah untuk memenuhi kebutuhan tugas
matakuliah struktur data semester 2 tahun ajaran 2023.
Dalam penyusunan makalah ini penulis telah banyak menerima bantuan baik berupa
materi selama proses penulisan. Untuk itu penulis dalam kesempatan ini menyampaikan ucapan
terimakasih kepada Ibu Ressy Dwitias Sari, S.T.,M.T.I selaku dosen pengampu matakuliah
Struktur Data atas pengarahan dan kemudahan yang telah diberikan kepada penulis dalam
pengerjaan makalah ini, juga kepada teman – teman dan semua pihak yang membantu dalam
penyelesaiannya.
Semoga Makalah ini bisa bermanfaat bagi para pembaca dalam
mengaplikasikan dikehidupan sehari-hari, makalah ini masih jauh dari sempurna, untuk itu kritik
dan saran dari pembaca yang bersifat membangun akan sangat diperlukan demi kesempurnaan
Makalah yang akan penulis buat mendatang.
Penulis
DAFTAR ISI
KATA PENGANTAR...................................................................................................................ii
DAFTAR ISI.................................................................................................................................iii
BAB I...............................................................................................................................................4
PENDAHULUAN..........................................................................................................................4
1.1 Latar Belakang...........................................................................................................................4
1.2 Rumusan Masalah......................................................................................................................5
1.3 Tujuan........................................................................................................................................5
BAB II.............................................................................................................................................5
PEMBAHASAN.............................................................................................................................5
2.1 Pengertian Metode Sorting........................................................................................................5
2.2 Macam Macam Metode Sorting................................................................................................5
2.3 Manfaat Metode Sorting..........................................................................................................15
2.4 Tujuan Metode Sorting............................................................................................................15
BAB III.........................................................................................................................................15
PENUTUPAN...............................................................................................................................15
3.1 Kesimpulan..............................................................................................................................15
3.2 Saran........................................................................................................................................15
DAFTAR PUSTAKA...................................................................................................................16
BAB I
PENDAHULUAN
1.3 Tujuan
1. Untuk mengetahui pengertian sorting?
2. Untuk mengetahui macam macam metode sorting?
3. Untuk mengetahui bagaimana pemrograman sorting?
4. Untuk mengetahui manfaat dan tujuan metode sorting tersebut ?
BAB II
PEMBAHASAN
2. Insertion Sort
Metode pengurutan pada insertion sort adalah metode dengan cara menyisipkan
elemen larik pada posisi yang tepat. Cara kerja insertion sort, Pertama - tama, dilakukan
iterasi, dimana di setiap iterasi insertion sort memindahkan nilai elemen,
kemudian menyisipkan nya berulang - ulang sampai ketempat yang tepat. dimana di
setiap iterasi insertion sort memindahkan nilai elemen,kemudian menyisipkannya
berulang-ulang sampai ketempat yang tepat.
Metode penyisipan (Insertion sort) bertujuan untuk menjadikan bagian sisi kiri
array terurutkan sampai dengan seluruh array berhasil diurutkan.
Insertion Sort bekerja seperti banyak orang yang sedang mengurutkan kartu
ditangan. Dimulai dengan tangan kiri yang kosong dan kartunya tertumpuk di meja.
Selanjutnya kita ambil satu persatu kartu di meja dan diletakkan di tangan kiri dengan
posisi yang benar (terurut). Untuk menemukan posisi yang banar, maka kita harus
membandingkan satu persatu kartu yang ada (di tangan kiri) secara berurutan.
Data dicek satu per satu mulai dari yang kedua sampai dengan yang
terakhir. Apabila ditemukan data yang lebih kecil daripada data sebelumnya, maka
data tersebut disisipkan pada posisi yang sesuai. Akan lebih mudah apabila
membayangkan pengurutan kartu. Pertama - tama anda meletakkan kartu – kartu tersebut
di atas meja, kemudian melihatnya dari kiri ke kanan. Apabila kartu di sebelah kanan
lebih kecil daripada kartu disebelah kiri, maka ambil kartu tersebut dan sisipkan di tempat
yang sesuai. Ada beberapa kelebihan dan kekurangan dalam metode insertion sort ini
diantaranya adalah sebagai berikut :
Sederhana dalam implementasinya.
Efektif jika jumlah data sedikit.
Jika list sudah terurut atau sebagian terurut makas Insertion Sort akan lebih
efisien dibanding Quicksort.
Lebih efektif dibanding Bubble Sort, dan Selection Sort
Loop dalam Insertion Sort sangat cepat, sehingga Insertion sort adalah
salah satumetode pengurutan tercepat pada jumlah data sedikit.
Stabil.
Banyaknya operasi yang diperlukan dalam mencari posisi yang tepat untuk
elemenlarik.
Untuk larik yang jumlahnya besar metode ini tidak praktis.
Jika list terurut terbalik sehingga setiap eksekusi dari perintah harus memindai
danmengganti seluruh bagian sebelum menyisipkan elemen berikutnya.
Berikut adalah contoh implementasi Insertion Sort:
def insertion_sort(arr):
for i in range(1, len(arr)):
key = arr[i]
j=i-1
while j >= 0 and key < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j + 1] = key
# Contoh penggunaan
arr = [64, 25, 12, 22, 11]
insertion_sort(arr)
print("Hasil setelah diurutkan:")
for i in range(len(arr)):
print("%d" % arr[i])
3. Radix sort
Radix sort adalah algoritma pengurutan (sorting) yang bekerja dengan
membandingkan digit-digit angka pada elemen yang diurutkan, mulai dari digit terkecil
(LSB atau Least Significant Digit) hingga digit terbesar (MSB atau Most Significant
Digit). Algoritma ini memanfaatkan sifat urutan leksikografis dari bilangan berbasis 10
untuk melakukan pengurutan secara efisien.
Pada setiap iterasi, radix sort mengelompokkan elemen-elemen berdasarkan digit
yang sedang diurutkan, kemudian mengumpulkan kembali elemen-elemen tersebut secara
urut. Proses ini dilakukan secara berulang-ulang hingga seluruh digit pada setiap elemen
telah diurutkan.
Keuntungan dari radix sort adalah dapat melakukan pengurutan dengan
kompleksitas waktu yang tetap, yakni O(kN), di mana k adalah jumlah digit pada elemen
yang diurutkan dan N adalah jumlah elemen yang diurutkan. Namun, algoritma ini
memiliki kelemahan pada pengurutan bilangan berbasis radix lainnya selain 10 dan
pengurutan elemen dengan nilai yang cukup besar.
def radix_sort(arr):
max_digit = len(str(max(arr))) # maksimum digit pada angka
for i in range(max_digit):
# Membuat sebuah list kosong untuk setiap digit dari 0 hingga 9
buckets = [[] for j in range(10)]
# Memasukkan angka ke dalam bucket sesuai digitnya
for num in arr:
digit = num // 10**i % 10
buckets[digit].append(num)
# Menggabungkan bucket ke dalam list
arr = [num for bucket in buckets for num in bucket]
return arr
Cara kerja dari algoritma Radix Sort adalah dengan melakukan pengurutan
berdasarkan digit angka. Pertama-tama, kita menentukan digit maksimum pada angka
dalam array yang akan diurutkan. Selanjutnya, untuk setiap digit dari digit terkecil hingga
digit terbesar, kita memasukkan angka ke dalam "bucket" yang sesuai dengan digitnya.
Setelah itu, kita menggabungkan bucket menjadi satu list, dan langkah-langkah ini
diulangi untuk digit selanjutnya hingga semua digit pada angka terurut.
4. Quick sort
Algoritma sortir yang efisien yang ditulis oleh C.A.R. Hoare pada 1962.
Dasar strateginya adalah “memecah dan menguasai”. Quicksort dimulai dengan menscan
daftar yang disortir untuk nilai median. Nilai ini, yang disebut tumpuan (pivot),
kemudian dipindahkan ke satu sisi pada daftar dan butir-butir yang nilainya lebih besar
dari tumpuan di pindahkan ke sisi lain.
1) Divide
Memilah rangkaian data menjadi dua sub-rangkaian dimana setiap elemen adalah
kurang dari atau sama dengan A dan setiap elemen pada A adalah lebih besar atau
sama dengan elemen pada A. A disebut sebagai elemen pivot. Perhitungan pada
elemen merupakan salah satu bagian dari prosedur pemisahan.
2) Conquer
Mengurutkan elemen pada sub-rangkaian secara rekursif. Pada algoritma
quicksort, langkah ”kombinasi” tidak di lakukan karena telah terjadi pengurutan
elemen– elemen pada sub-array. Ada beberapa kelebihan dan kekurangan dalam
metode quick sort ini diantaranya adalah sebagai berikut :
Secara umum memiliki kompleksitas O(n log n).
Algoritmanya sederhana dan mudah diterapkan pada berbagai bahasa
pemrograman.
Dalam prakteknya adalah yang tercepat dari berbagai algoritma
pengurutan dengan perbandingan, seperti merge sort dan heap sort.-
Melakukan proses langsung pada input dengan sedikit tambahan memori.-
Bekerja dengan baik pada berbagai jenis input data.
Quicksort dapat dengan mudah diparalelkan karena sifatnya “divide-and-
conquer”.- Sedikit kesalahan dalam penulisan program membuatnya bekerja
tidak beraturan.
Memiliki ketergantungan terhadap data yang dimasukkan, yang dalam kasus
terburukmemiliki kompleksitas O(n2).
Secara umum bersifat tidak stable, yaitu mengubah urutan input dalam hasil
akhirnya.
Pada penerapan secara rekursif bila terjadi kasus terburuk dapat
menghabiskan stackdan memacetkan program.
Berikut adalah contoh implementasi Quick Sort:
def quicksort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quicksort(left) + middle + quicksort(right)
arr = [3, 6, 2, 8, 1, 9, 4, 5, 7]
print(quicksort(arr))
Penjelasan:
Fungsi `quicksort` menerima sebuah list `arr` sebagai input dan akan
mengembalikan list yang telah diurutkan dengan algoritma quicksort.
Jika panjang `arr` kurang dari atau sama dengan 1, maka list tersebut sudah
terurut.
Pilih elemen tengah dari `arr` sebagai pivot.
Buat 3 list baru yaitu `left`, `middle`, dan `right`. Elemen-elemen yang lebih kecil
dari pivot akan dimasukkan ke left, elemen-elemen yang sama dengan pivot akan
dimasukkan ke `middle`, dan elemen-elemen yang lebih besar dari pivot akan
dimasukkan ke `right`.
Lakukan `rekursi` dengan memanggil quicksort pada `left` dan `right`, dan
menggabungkan hasilnya dengan `middle`.
Contoh output dari program ini adalah `[1, 2, 3, 4, 5, 6, 7, 8, 9]` setelah
melakukan pengurutan pada list `arr`.
5. Shell sort
Metode ini dikembangkan oleh Donald L. Shell pada tahun 1959. Dalam metode inijarak
antara dua elemen yang dibandingkan dan ditukarkan tertentu. Secara singkat
metode ini dijelaskan sebagai berikut. Pada langkah pertama, kita ambil elemen pertama
dan kita bandingkan dan kita bandingkan dengan elemen pada jarak tertentu dari elemen
pertama tersebut. Kemudian elemen kedua kita bandingkan dengan elemen 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. Ada beberapa kelebihan dan kekurangan dalam
metode shell sort ini diantaranya adalah sebagai berikut :
Kelebihan:
Efisien pada data yang hampir terurut: Shell sort dapat dengan cepat mengurutkan
data yang hampir terurut dengan baik, karena pendekatan bagi dan kuasai
memungkinkan untuk meminimalkan jumlah perbandingan yang diperlukan untuk
mengurutkan data yang hampir terurut.
Pengurutan data berukuran besar: Shell sort memiliki kinerja yang baik pada data
berukuran besar, karena menggunakan pendekatan divide and conquer, di mana
data dibagi menjadi subdaftar yang lebih kecil dan kemudian diurutkan secara
terpisah.
Dapat disesuaikan dengan kondisi data: Shell sort dapat disesuaikan dengan
kondisi data tertentu dengan mengubah ukuran interval pada setiap iterasi. Hal ini
memungkinkan pengguna untuk memilih interval terbaik untuk setiap data yang
diurutkan.
Kekurangan:
Tidak stabil: Shell sort tidak stabil, artinya tidak dapat mempertahankan urutan
asli dari elemen-elemen yang sama pada data yang diurutkan.
Kompleksitas: Meskipun Shell sort memiliki kinerja yang lebih baik daripada
beberapa algoritma pengurutan lainnya, kompleksitas waktu Shell sort sebesar
O(n^2) pada kasus terburuk membuatnya kurang efektif pada data yang sangat
besar atau terurut terbalik.
Kesulitan menentukan interval: Salah satu tantangan dalam implementasi Shell
sort adalah menentukan interval yang optimal untuk setiap data yang diurutkan.
Jika interval tidak dipilih dengan baik, maka kinerja Shell sort dapat menjadi
buruk.
Berikut adalah contoh implementasi Shell Sort:
#!/bin/bash
# Fungsi untuk mengurutkan array menggunakan Shell Sort
function shellSort {
arr=("$@") # Konversi argumen menjadi array
# Menghitung panjang array
n=${#arr[@]}
# Inisialisasi gap
gap=$((n/2))
# Looping sampai gap=1 (akhir dari algoritma)
while [ $gap -gt 0 ]
do
# Looping untuk mengurutkan bagian yang di-gap
for ((i=gap; i<n; i++))
do
# Simpan elemen ke-i dan gap ke-j
temp=${arr[$i]}
j=$((i-gap))
# Geser elemen ke kiri yang lebih besar dari elemen yang disimpan
while [ $j -ge 0 ] && [ ${arr[$j]} -gt $temp ]
do
arr[$((j+gap))]=${arr[$j]}
j=$((j-gap))
done
# Masukkan elemen yang disimpan ke posisi yang tepat
arr[$((j+gap))]=$temp
done
# Kurangi gap
gap=$((gap/2))
done
# Cetak array yang telah diurutkan
echo "${arr[@]}"
}
# Contoh penggunaan
arr=(12 34 54 2 3)
echo "Array sebelum diurutkan: ${arr[@]}"
sorted_arr=$(shellSort "${arr[@]}")
echo "Array setelah diurutkan: $sorted_arr"
BAB III
PENUTUPAN
3.1 Kesimpulan
Penggunaan algoritma pengurutan dalam ilmu komputer memang sangat diperlukan
sebab kita tidak bisa membuat algoritma dengan prinsip “yang penting jalan”. Bila ingin
mengurutkan data yang sedikit jumlahnya maka sebaiknya menggunakan insertionsort. Namun
bila ingin mengurutkan data yang sangat banyak, merge sort dan quick sort akan menjadi pilihan
yang baik.
Makalah ini tidak membahas semua algoritma pengurutan, karena untuk membahas satu
algoritma secara mendalam pun akan sangat rumit dan mungkin menghabiskan satu makalah
ini. Namun melalui tulisan ini, pembaca diharapkan mampu menganalisa penggunaan metode
sorting algorithmic yang baik.
3.2 Saran
Dengan disusunya makalah ini, semoga makalah ini bisa menjadi inspirasi dalam kehidupan
sehari-hari, secara tidak sengaja sering kita malakukan prosedur semacam ini dikehidupan
sehari-hari seperti melakukan langkah mencuci baju, menjalankan sepeda motor. Itu semua
adalah algoritma yang dilakukan dalam kehidupan sehari-hari. Begitu juga dalam computer atau
didalam bahasa pemrograman. Jika langkah-langkah dalam kehidupan sehari-hari kita amati,
hampir tidak jauh beda dengan langkah-langkah pemrograman.
DAFTAR PUSTAKA